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たが、それでもゼロになり、実際の答えを得る方法がわかりません。
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たが、それでもゼロになり、実際の答えを得る方法がわかりません。
single と double の間で計算を実行する場合、戻り値には精度が最も低いクラスが含まれます。これは、次のことを意味します。
single (sin (10)) - sin (10)
あなたの結果はクラスシングルになります。これは、異なる整数型間の操作でも同じであることに注意してください。精度の低いものが返されます。これは、減算が発生する前に、ダブルもシングルにキャストされることを意味します。
他の回答から、Matlab は実際に double で計算を実行しているようです。Matlab も Octave のようなシングルを返すため、これは非常に奇妙です。single を double に変換し、double で計算を実行し、single にキャストする必要があります。とにかく、 Matlab の互換性に関するOctave のバグを報告しました。