您的目标是在 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中文网其他相关文章!