2012-10-21 51 views
0

我想通過雙值除以一個整數,但我相信這是因爲預計其損失精度..採用雙分頻的整失去精度

#include <cmath> 
#include <cstdio> 
int main() 
{ 
    double t=5465/54.0; 
    double t1=(double)5465/(double)(t); 
    double t3 = 5465.0/101.203; 
    printf("%lf %lf %lf\n",t,t1,t3); 
    return 0; 
} 

對於t3 = 54.0003上面的代碼值但T1它變成54而不是獲得與t3相同的值。 我不明白我在做什麼

+1

* 5465 /(5465/54.0)*等於* 54 *,所以我不明白爲什麼你會驚訝於你得到的結果。你會得到完全的預期結果。 – sth

回答

4

5465/54.0的值是101.203703704(小數點後9位)。在你的代碼使用此

double t3 = 5465.0/101.203; 

double t=5465/54.0; 

結果截斷爲101.203一些未知的原因。因此,您正在計算2個不同的值作爲截斷的結果。從本質上講,你期待這兩個計算是相同的,但

5465.0/101.203 != 5465/101.203703704 
+0

謝謝..我得到的結果也沒有四捨五入..i.e使噸= 5465/54 – pranay

1

結果當然會不同。你使用101.203而不是101.203703704。