0

GCC によってコンパイルされた標準の C コードへの些細な追加だと思っていたことが、私をやや混乱させました。

A と呼ばれる double と B と呼ばれる double があり、A = 1e-20 などの非常に小さな指数関数があり、B が 1e-5 などのより大きな値である場合、A + B の合計に等しい私の double C はなぜかかるのですか?ドミナント値 B について? 小数点以下 25 桁まで出力するように指定すると、1.00000000000000100000e-5 になることを期待していました。

代わりに、私が得るのは 1.00000000000000000000e-5 です。long double などを使用する必要がありますか?

非常に混乱しており、ほとんどの人が答えるのが簡単な質問です。事前にご指導いただきありがとうございます。

4

2 に答える 2

1

Yes, there is not enough precision in the double mantissa. 2^53 (the precision of the double mantissa) is only slightly larger than 10^15 (the ratio between 10^20 and 10^5) so binary expansion and round off can easily squash small bits at the end.

http://en.wikipedia.org/wiki/Double-precision_floating-point_format

Google is your friend etc.

于 2012-11-09T14:10:12.210 に答える
-1

浮動小数点変数は、固定小数点よりも広い範囲の値を保持できますが、有効桁数の精度には制限があります。
非常に大きな数値または非常に小さな数値を表すことができますが、精度は有効桁数に依存します。
数値を表現するために使用される指数に関して、数値間の操作を非常に遠くにしようとすると、それらを処理する能力は、それらを同じ指数で表現する能力に依存します。
あなたの場合、2 つの数値を合計しようとすると、小さい方の数値が大きい方の指数と一致し、有効桁数が範囲外であるため 0 になります。詳細については、たとえばwikiを参照してください。

于 2012-11-09T14:19:20.230 に答える