双倍和长双精度差异的原因是什么?

时间:2014-03-22 00:32:11

标签: c++ floating-point

问题

我在两个不同的编译器上运行下面的代码,每个编译器显示不同的输出。

#include <iostream>

using namespace std;   

int main()
{
    long double LD1 = 99999.9999;
    long double LD2 = 99999.9999 + 1e-9;
    double D = 99999.9999;

    long long a = LD1 * 10000;
    long long b = LD2 * 10000;
    long long c = D * 10000;

    cout << a << endl << b << endl << c << endl;
}

ideone(选择C ++ 11)上运行时,我得到以下内容:

999999998
999999999
999999999

在MSVC13上运行时,我得到以下内容:

999999999
999999999
999999999

问题

  1. 99999.9999 * 10000 = 99999.9998怎么可能(这个问题背后的原因是什么)?
  2. 如何通过添加1e-9来解决问题?
  3. 为什么我在两个编译器中获得a的不同值?

0 个答案:

没有答案