3

Octave を使用して、sin(x) に関連する丸め誤差を調べようとしています。次の数値が得られます。

>> single(sin(10))
ans = -0.544021129608154

>> sin(10)
ans = -0.544021110889370

>> (single(sin(10))) - (sin(10))
ans = 0

-1.8718784 × 10^-8

と入力しましformat longたが、それでもゼロになり、実際の答えを得る方法がわかりません。

4

2 に答える 2

3

single と double の間で計算を実行する場合、戻り値には精度が最も低いクラスが含まれます。これは、次のことを意味します。

single (sin (10)) - sin (10)

あなたの結果はクラスシングルになります。これは、異なる整数型間の操作でも同じであることに注意してください。精度の低いものが返されます。これは、減算が発生する前に、ダブルもシングルにキャストされることを意味します。

他の回答から、Matlab は実際に double で計算を実行しているようです。Matlab も Octave のようなシングルを返すため、これは非常に奇妙です。single を double に変換し、double で計算を実行し、single にキャストする必要があります。とにかく、 Matlab の互換性に関するOctave のバグを報告しました。

于 2016-02-05T02:47:55.567 に答える