9

Linux 環境で動作する C++ アプリケーションを開発しています。小数点以下 6 桁の大きな値を格納する必要があります。そのために double を使用しましたが、割り当てた後、正確な値が含まれていませんでした。丸められました。

元:

double dValue = 79447461534242.913072; //Assignement of value

しかし、それを行った後、dValueの値を見るたびに、79447461534242.906のようなものになります

なぜこれが起こっているのかを教えて、精度を失うことなく正確な値を保持できる正しいデータ型を提案してください。

4

4 に答える 4

8

典型的な実装では、 adoubleは約 15 桁の精度totalを持ちます。小数点の前後は関係なく、全部で15桁です。

あなたの場合、元の番号は約 20 桁なので、すぐに 5 桁が失われます。

于 2012-08-23T17:15:44.920 に答える
6

C++ は、設計上、ある程度正確な IEEE 浮動小数点型を使用します。任意精度が必要な場合は、GNU MP Bignumやその他の任意精度ライブラリなどを調べてください。

于 2012-08-23T17:16:45.590 に答える
2

最も一般的に使用される倍精度形式では、数値が 53 ビットの精度で格納されます。これにより、10 進数で約 16 桁の精度が得られます。

の方が精度が高いことがわかるかもしれませんlong doubleが、それよりも大きいという保証はありませんdouble

ネイティブ マシン タイプよりも高い精度が必要な場合は、GMPなどの高精度の数値ライブラリが必要になります。

于 2012-08-23T17:19:01.250 に答える
2

Linux では、4 倍精度の浮動小数点型である __float128 を使用できます。

于 2012-08-23T17:21:39.677 に答える