2

副鼻腔とは、ここで c stdlib sin() / fpu assembl;y fsin を意味します。

この sinus 引数には、10 進数で約 16 桁以上の精度を与えることができます。たとえば、sin(1.1e-14); です。sin(1.2e-14) 次に結果を取得し、

sinus は、このような小さなデルタではほぼ線形ですが、同じ 16 桁の精度でも計算できるにもかかわらず、そのような小さなデルタでも正確に計算されますか?

(引数と特に出力値の両方でこれほどの精度で計算するのはしばらくの間私にとって少し珍しいように思えたので、私はそれについて尋ねます。

4

2 に答える 2

2

IIRC、正の数の場合、9e18より大きく9e-18より小さい場合に失敗し始めます。これはCPUの制限です。

詳細については、http://www.intel.com/design/processor/manuals/253665.pdfの8.1.3.2で、FSINとその仲間の制限を指定する条件コードフラグを参照してください。

于 2012-11-08T11:19:45.910 に答える
2

sin(x) = x - x^3/3 のテイラー級数! + x^5/5! - ...

0 > x > 1 の任意の数値は、基数 10 で次のように表されます 。

x = a*10^-n、ここで 1<=a<10 例 x=0.003 = 3*10^-3
x^3 = a^3 * 10^-3n

次の項の大きさは約 b*10^-3n (階乗を無視) です。nが大きくなる (またはxが 0 に近づく) と、次の項は急速に消滅し始めます。

x=0.003 の場合、いくつかの最初の項は

   0.003000000000000000 = 10^-3 * 3000000000000000  <-- x
 - 0,000000004500000000 = 10^-3 * 0000004500000000  <-- x^3/3!
 + 0,000000000000002025 = 10^-3 * 0000000000002025  <-- x^5/5!
 ----------------------   -----------------------------
 = 0.002999995500002025 = 10^-3 * 2999995500002025

先頭のゼロと第 4 項 x^7/7 を無視して 16 桁です。結果にはもう影響しません。x がさらに小さくなると、次は x^5/5! 項を結果に追加することはできず、最終的に x^3/3! 項を加算 (または減算) することはできません。項 x のみが 16 桁の精度で表すことができます。

sin(x) = x は x=0 の場合のみです。まさに。それ以外は概算です。引数 pi/2 は浮動小数点数として表すことができないため、sin(pi/2)=1 でさえ数学ライブラリの近似値です。

于 2012-11-08T11:13:16.590 に答える