私は C++ で作業しており、double での読み取りの精度に問題があります。
input_file>>temp_double;
ファイル内の数値は 1234.567 のようなものですが、読み込むと 1234.56699999999 となります。では、どうすればファイルにあるとおりに読み取ることができますか。後の関数で小数の量を使用するので、適切である必要があります。小数点以下 3 桁から 5 桁までのファイル範囲の数字
他の人が言ったように、 adouble
は多くの小数値を正確に表すことはできません。データをバイナリで保存し、最終的に丸めます。10 進数で正確に表現できる多くの数値は、2 進数では非終端表現を持ちます。
正確な表現が必要な場合は、たとえばBoost::Multiprecisionを参照してください。
float
double
符号ビット、指数、および小数値を格納する IEEE 標準を使用してデータを格納します。小数部分の基数 10 から基数 2 への変換により、ほとんどの 10 進数値は格納時に正確に正確ではありません。
また、数学的には、1234.566999999999999.... = 1234.567