[英]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.