我在两个不同的编译器上运行下面的代码,每个编译器显示不同的输出。
#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
99999.9999 * 10000 = 99999.9998
怎么可能(这个问题背后的原因是什么)?1e-9
来解决问题?a
的不同值?