您的目標是在 C 中實現大型精度類,並且在將數字相加時遇到問題。當您添加 0xffffffff 和 0x04 時,您會得到 0xffff0003,而不是預期的 0x0100000003。
程式碼中突出顯示的部分是:
if (i < lhs.nbytes) { if (ret.data[i].data == 255 && ret.data[i + 1].carry == 1) increment(&trhs, i + 1); ret.data[i].data += ret.data[i + 1].carry; }
這裡是為什麼它會導致錯誤result:
進位傳播:在循環的每次迭代中,上一次加法的進位應添加到目前結果中。但是,此程式碼僅在 ret.data[i].data 為 255 且 ret.data[i 1].carry 為 1 時套用進位。這意味著進位並不總是傳播,從而導致錯誤的答案。
不正確的儲存順序:mpfl 類別似乎以小端格式儲存數字,其中最低有效位元組儲存在最高索引中。這不是儲存數字進行加法的首選方式,因為它使得處理高階位元組的進位變得更加困難。
要解決這些問題,請考慮以下建議:
以上是為什麼我的 C 大型精度加法不能正確傳播進位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!