一尘不染

一种有效的方法,用一个常数将存储在2个寄存器中的非常大的数除

algorithm

假设我要计算以下内容:

A/Z

其中A的长度为128位,长度Z为64位。A由于系统的寄存器最多可以存储64位,因此它存储在2个64位寄存器中。什么是计算结果的有效方法?

PS:我已经通过使用CSD表示法解决了类似的乘法问题。但是,这需要1/Z首先进行计算。


阅读 220

收藏
2020-07-28

共1个答案

一尘不染

解决此问题的正确方法是回到基础知识:

  • 用分母除以最高有效寄存器
  • 计算商Q和余数R
  • 定义一个新的临时寄存器,最好与其他2个寄存器具有相同的长度
  • 其余应占据临时寄存器中的最高有效位
  • 将低位有效寄存器向右移动相同数量的i,R 然后将结果加到临时寄存器中。
  • 回到步骤1

除法后,必须将所得的余数强制转换为double,除以分母,然后加到商中。

2020-07-28