我在代码中看到一个奇怪的问题
在我的mfc / c ++应用程序中,有一个函数在两个不同的点被调用。一次,当显示对话框/组件时。第二次是从第二个对话框/组件发生某一代。唯一的区别是,从第二个对话框中,调用发生在一个新线程中。
在此功能中,细分为最简单,减去2个双倍。
double a = -13.497999999999999
double b = 33.564999999999998
a - b
当我单步执行代码时,我从减法中获得了不同的结果,并且对其他计算产生了影响。 Dialog 2的结果似乎更接近有效。
Dialog 1 - 20.066999435424805
Dialog 2 - 20.067000000000000
很简单,简单的减法会返回不同的结果。差异可能很小,但它们确实会导致更大的问题。
使用VS2010,据我所知,设置都是正确的。
我已经尝试过使用浮点数和长双数来看看是否可以解决任何事情,但事实并非如此。
答案 0 :(得分:1)
根据此URL,double包含15-16个十进制数字:
Double precision - decimal places
12 345678901234567
The value -13.497999999999999 has 17 digits.
减法值之间的差异仅为0.000000564575195;这个 差异在双精度的16位十进制数精度范围内。
1 234567890123456
0.000000564575195
也可以从这个URL:
http://en.wikipedia.org/wiki/Double-precision_floating-point_format
为数字中的数字保留了53个二进制位;这给了 精度为15到17的十进制数