2013-06-20 59 views
1

夥計!我遇到了一個小問題:我正在做一個簡單的三個double值的加法。結果比使用的值具有更小的精度。添加雙打精度下降?

double minutes = 3; 
minutes = minutes/(24.0*60.0); // contains 0.00208333 
double hours = 3; 
hours = hours/24.0; // contains 0.125 
double days = 3; // contains 3 

double age = days + hours + minutes; // result is 3.12708 

我發現沒有辦法避免這種行爲。

+0

你如何檢查的價值你變量? – Spook

+3

問題是什麼?計算似乎沒問題。你如何打印結果?你想要打印更多數字嗎? – zch

+7

注意:1)取決於你輸出你的值的方式,你可能看不到所有的有效數字,2)雙打不能精確表示數值,如0.1 – PlasmaHH

回答

5

沒有什麼似乎是錯誤的計算爲您的帖子上的評論說。

如果你想看到更精確考慮仰視setprecision()

+0

確實計算是正確的。我通過使用printf()驗證了這一點。精度的損失是由std :: cerr輸出或將其分配給std :: stringstream引起的。 setprecision做了訣竅。非常感謝! – XQDev

0

是沒有問題的。 0.00208333和3.12708的有效數字都是6.這是一個正確的結果。

+0

就我而言,這是一個問題,即使這可能沒有任何不當行爲。 ;) – XQDev

0

有時爲了根據所需的精度,我們必須指定的精度極限來獲取值,這裏是我的代碼工作正常,希望它有助於:

double minutes = 3; 
minutes = minutes/(24.0*60.0); 
double hours = 3; 
hours = hours/24.0; 
double days = 3; 
double age = days + hours + minutes; 
printf("%.8f",age);//here i have included the places of precision (.8)