簡體   English   中英

C ++中雙精度類型值的減法

[英]Subtraction of Double type Values in C++

我試圖從C ++中的大雙數中減去小雙數。 這是我的代碼

int main() 
{
double a=166666166667000000.000000;
double b=1.0;
double c=4.0;
double d=10.0;

double ans_b=a-b;
double ans_c=a-c;
double ans_d=a-d;

printf("%f\n%f\n%f\n",ans_b,ans_c,ans_d);
return 0;
}

此代碼給我以下輸出-

166666166667000000.000000
166666166667000000.000000
166666166667000000.000000

但是,這三個都應該是不同的。 為什么用double類型的減法會表現這種方式?

166666166667000000和10都可以精確表示為double。 減法的實數算術結果166666166666999990不是。 嚴格小於166666166667000000的最大兩倍是166666166666999968。

166666166666999990比166666166666999968更接近166666166667000000,因此166666166667000000是減法的舍入到最接近的兩倍結果。

如果僅執行一個小數減法,則可以忽略該問題。 如果您做的小數減去它們的累積效應很重要,則需要重新排列計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM