2014-12-30 48 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