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中文网其他相关文章!