在C++中,我使用以下代码来计算由于float和double的有限精度而导致误差的数量级:
然而,当我使用MinGW在Windows 7上编译和运行它时,结果是这样的。
float n=1;
float dec = 1;
while(n!=(n-dec)) {
dec = dec/10;
}
cout << dec << endl;
在双精度情况下,我只需要在第1和第2行中将float替换为double。
现在当我在Unix系统上使用g++进行编译和运行时,结果如下:
Float 10^-8
Double 10^-17
然而,当我使用MinGW在Windows 7上编译和运行它时,结果是这样的。
Float 10^-20
Double 10^-20
这是什么原因?
n!=(n-dec)
的中间结果存储在 80 位扩展精度中。10^-20
左右是 80 位浮点数的 epsilon。 - Mysticial