c++ - 如何避免对大浮点或 double 值进行舍入?

标签 c++ floating-point-precision rounding-error

我正在解决一些c++问题,应该输出22258199.5000000这个数字,我已经将结果存储在 double 据类型中,当我尝试使用std::cout打印该变量时,它四舍五入到22258200.0000000,我不知道为什么这是发生的事吗?有人能解释一下吗?我该怎么做才能避免这个问题?

最佳答案

32 位 float 类型可容纳大约 7 位十进制数字,超出该数字的任何内容都将四舍五入到最接近的可表示值。

64 位 double 类型可保存大约 15 位十进制数字,并且还会对超出该数字的值进行四舍五入。

由于您的值四舍五入到最接近的 7 位数字,因此您似乎在某处使用了 float 变量。将 float 值复制到 double 不会恢复丢失的数字。

这不适用于您的示例,但可能适用于其他示例 - 舍入以二进制而不是十进制形式进行,因此您最终可能会得到一个似乎包含比我上面指出的更多数字的值。只需知道只有前 7 或 15 的十进制数才是准确的。

关于c++ - 如何避免对大浮点或 double 值进行舍入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231777/

相关文章:

c - 矩阵乘法的 sse 精度误差

c++ - 纯虚函数调用错误

c++ - 为什么在 ADL 中重载优先于显式特化

excel - Postgres 小数精度 VS Excel

java - 这个非常小的浮点常数比预期的更近似

floating-point - 它是 52 位还是 53 位浮点精度?

javascript - 有没有办法在 Javascript 中 chop 科学记数法?

c++ - 如何处理 C++ 数学表达式中的浮点比较,从而可以处理舍入误差?

c++ - 指针运算 : out of bound without dereferencing

c++ - 定点组合器和显式结果类型