我在 C++ 中工作,并且在双精度读取方面存在问题
input_file>>temp_double;
文件中的数字类似于 1234.567,但当它读入时,它读取为 1234.56699999999。那么我怎样才能让它在文件中读取,我在后面的函数中使用小数的数量,所以我需要它是正确的。文件中的数字范围为小数点后 3-5 位
正如其他人所说, adouble
不能精确地表示许多十进制值。它以二进制形式存储其数据,并最终四舍五入。许多可以用十进制精确表示的数字在二进制中具有非终止表示。
如果您需要精确表示,请查看例如Boost::Multiprecision。
float
并double
使用存储符号位、指数和小数值的 IEEE 标准存储它们的数据。由于小数部分的基数为 10 到基数 2 的转换,大多数十进制值在存储时不会完全精确。
此外,数学上,1234.566999999999999.... = 1234.567