C ++减法差异 - 为什么?

时间:2014-09-15 16:07:06

标签: c++ double

我在代码中看到一个奇怪的问题

在我的mfc / c ++应用程序中,有一个函数在两个不同的点被调用。一次,当显示对话框/组件时。第二次是从第二个对话框/组件发生某一代。唯一的区别是,从第二个对话框中,调用发生在一个新线程中。

在此功能中,细分为最简单,减去2个双倍。

double a = -13.497999999999999
double b = 33.564999999999998 
a - b

当我单步执行代码时,我从减法中获得了不同的结果,并且对其他计算产生了影响。 Dialog 2的结果似乎更接近有效。

Dialog 1 - 20.066999435424805 
Dialog 2 - 20.067000000000000

很简单,简单的减法会返回不同的结果。差异可能很小,但它们确实会导致更大的问题。

使用VS2010,据我所知,设置都是正确的。

我已经尝试过使用浮点数和长双数来看看是否可以解决任何事情,但事实并非如此。

1 个答案:

答案 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的十进制数

相关问题