[英]Why (1UL <<53) plus 1.0 does not equal to itself?
說
int64_t x = (1UL << 53);
cout << x << end;
x+= 1.0;
cout << x << end;
x的結果相同,即為'9007199254740992'。
但是, x += 1;
可以使x加1正確。
此外,對於1UL << 52
加1.0可以正確得出結果。
我認為可能是浮動不精確。 有人可以給我更多細節嗎?
x+= 1.0
的計算方式為
x = (int64_t)((double)x + (double)1.0);
數字2^53 + 1 = 9007199254740993
不能完全表示為IEEE double
,因此將其舍入為2^53 = 9007199254740992
(實際上,這取決於當前的舍入模式),然后將其無損地轉換為int64_t
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.