1

Linux x86_64 の C++ コードでは、倍精度計算 (+ または -) が必要です。

26.100000000000001 - 26 + 0.10000000000000001

私が得た:

0.20000000000000143

0.2を取得したいです。

ここでは、表示形式はインポートではなく、計算結果が if-else 分岐条件に使用されます。したがって、if-else 条件で 10 進数の後の 4 桁を比較するだけです。

丸め誤差のようですか?

計算精度を小数点以下4桁に制限するには?

オーバーヘッドを避けるために、関数を呼び出したくありません。

変換のオーバーヘッドがあるため、stringstream を使用したくありません。

より良いアイデアはありますか?

ありがとう

4

3 に答える 3

8

計算精度は良好です。制御しようとしているのは表示精度です。setprecision()if usingまたはif using<iostream>のようなフォーマッタでそれを行うことができます。"%.4f"<stdio.h>

結果を 10 進数で表示しているため、既に関数を呼び出しています。

PSは、 、、または任意の 2 進仮数形式0.1で正確に表すことはできません。に因数分解し、10 進数は 2 進数で無限に繰り返される数字シーケンスです。floatdouble(1/2) * (1/5)1/5

PPS GMPを参照してください。それはあなたの最高の希望かもしれません。

于 2011-12-25T18:48:27.690 に答える
2

単に印刷したい場合は、printf("%10.4lf") を使用できます。もちろん、精度を任意に変更できます。

于 2011-12-25T18:47:38.453 に答える
1

小数点以下 4 桁までの同等性のみに関心がある場合は、すべてに 10,000 を掛けて、整数演算を使用します。(10,000 を掛けた後に丸める必要がある場合があります。)

于 2011-12-26T01:40:49.260 に答える