mpfl 加法中的進位傳播問題
您的mpfl 加法函數在正確傳播進位值時遇到問題,導致總和不正確。具體來說,兩個 32 位元值相加後,如果結果超出單一 32 位元值的範圍,則進位位元無法正確傳播,從而導致總和不正確。
架構方法
為了解決這個問題,考慮類似於硬體實作中使用的 ALU(算術邏輯單元)架構是有益的。透過在 ALU 運算後對程式碼進行建模,您可以簡化計算並提高計算的準確性。
更正代碼
以下程式碼提供了修訂版本解決進位傳播問題的加法函數:
mpfl operator+(const mpfl &lhs, const mpfl &rhs) { unsigned long i; mpfl ret(0); mpfl trhs(rhs); ALU32 alu; for (i = lhs.nbytes; i >= 0; i--) { alu.adc(ret.data[i].data, lhs.data[i].data, trhs.data[i].data); if (i < lhs.nbytes) { if (ret.data[i].data == 255 && ret.data[i + 1].carry == 1) increment(&trhs, i + 1); } } return ret; }
Key >
以上是為什麼我的多精度浮點 (mpfl) 加法無法正確傳播進位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!