2014-12-30 34 views
0

我明白,当我增加精度时,我应该得到更精确的结果。但是,这并不是从这个例子,我增加了精度很清楚,但我没有得到正确的结果:使用双精度和准确性

#include <iostream> 
#include <iomanip> 
int main() 
{ 
    using namespace std; 
    cout << setprecision(17); 
    double dValue; 
    dValue = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1; 
    cout << dValue << endl; 
} 

输出是0.99999999999999989

有人能解释我为什么会这样?

+2

您正在使用的编程语言是C++。 –

+0

查看IEEE 754标准,http://en.wikipedia.org/wiki/Double-precision_floating-point_format,计算机看不到像0.1这样的东西。它是最接近的二进制数(对于简单的蓝图示例2^-3 = 0.128d)。当您对浮点数进行计算时,您不会得到准确的结果。 – Nabuchodonozor

回答

0

增加精度不会产生更精确的结果。它只是将输出格式化为您想要显示的小数位数。你所看到的“错误”更多的是与计算机无法精确地将0.1精确地表示为你正在寻找的精度水平。

+0

为什么我无法在屏幕上打印1000000位数字。为什么不能无法进入? – user3891236

+0

@ user3891236请阅读上面提供的链接,以及http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。为什么你认为屏幕上的字符数量与变量的数量有关?或者尝试一些二进制计算:您的小数点0.1是* infinte *长度的二进制数字... – deviantfan