C/C++ 加法問題?

2016-12-27 2:01 pm
使用C++寫程式發現一個問題

如圖所示

我使用long long int k 儲存 pow(2,i)+1的計算結果

當i<53計算結果是正確的
i = 1 , k = 3
i = 2 , k = 5
i = 3 , k = 9
.
.
.
i = 52, k = 4503599627370497


i = 53, k = 9007199254740992 (X) (2^53=9007199254740992) (k沒有加一)

當程式改為

long long int k = pow(2, 53) ;
k = k + 1;

k的結果為9007199254740993 (O)

感覺跟有效位數有關,但又無法提出一個合理的解釋。

回答 (1)

2016-12-27 9:03 pm
✔ 最佳答案
IEEE 64-bit double 定義52 bits 的假數(mantisa)
從浮點數的角度來說, double 的精度是52 bits, 超過此精度的運算值都忽略掉
(闢如 2^53+2以上偶數(<2^53)都可精確加運算 奇數會少1,...)


收錄日期: 2021-05-04 02:15:33
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20161227060131AAVMS9n

檢視 Wayback Machine 備份