0

私は C++ で作業しており、double での読み取りの精度に問題があります。

input_file>>temp_double;

ファイル内の数値は 1234.567 のようなものですが、読み込むと 1234.56699999999 となります。では、どうすればファイルにあるとおりに読み取ることができますか。後の関数で小数の量を使用するので、適切である必要があります。小数点以下 3 桁から 5 桁までのファイル範囲の数字

4

2 に答える 2

2

他の人が言ったように、 adoubleは多くの小数値を正確に表すことはできません。データをバイナリで保存し、最終的に丸めます。10 進数で正確に表現できる多くの数値は、2 進数では非終端表現を持ちます。

正確な表現が必要な場合は、たとえばBoost::Multiprecisionを参照してください。

于 2013-10-05T17:40:30.803 に答える
0

floatdouble符号ビット、指数、および小数値を格納する IEEE 標準を使用してデータを格納します。小数部分の基数 10 から基数 2 への変換により、ほとんどの 10 進数値は格納時に正確に正確ではありません。

また、数学的には、1234.566999999999999.... = 1234.567

于 2013-10-05T17:42:20.707 に答える