VS2019 C++17环境下double类型变量赋值结果与预期不符
现象原因说明
C++ 中的double类型遵循IEEE 754双精度浮点数标准,采用二进制格式存储数值,该特性是出现观测到的误差的核心原因:
- 代码中写入的十进制小数值
1.161050、1.161190转换为二进制后是无限循环的小数,而double仅有64位存储空间,只能截取无限序列中最接近原始值的有限位存储,截断过程会产生极小的精度偏差 - 断点中显示的
1.1610499999999999、1.1611899999999999是截断后的二进制值转回十进制的显示结果,属于double能存储的最接近原始赋值的合法值,并非编译器或者调试工具的bug
额外说明:该精度误差是所有遵循IEEE 754标准的开发环境的共有特性,和VS版本、C++标准版本、Debug/Release编译模式无关。如果业务场景对十进制精度要求极高(比如金融、计量类场景),可以改用专门的十进制数值库,或者将数值放大固定倍数转为整数存储后再做运算。
内容的提问来源于stack exchange,提问作者Pasha
相关产品推荐
相关产品推荐

