这种除法算法的名称是什么?

时间:2013-07-30 00:46:20

标签: c++ c algorithm floating-point computer-science

我有一个算法为浮点分区执行mantissas的划分,但我不确定 的算法的正确名称是什么(例如,恢复,非恢复,SRT)。

为了处理我的输入是浮点格式的事实,我减去操作数指数以找到新的指数,对符号位进行XOR,以获得新的符号位,并对舍入方案执行舍入到最接近。

但是,我使用维基百科的这个算法来划分尾数: (https://en.wikipedia.org/wiki/Division_algorithm):

这是我的代码:

{Code for handling exponent, sign bit, and grabbing mantissa, 
invalid input detection and zero input detection}
{op1 is the numerator, op2 is the divisor)
{assuming 32-bit floating point)

long long mant1, mant2;

mant1 = (1 << 23) & (op1 & 0x7FFFFF); // Make mantissas with hidden bit masked in
mant2 = (1 << 23) & (op2 & 0x7FFFFF);


long long Q = 0, N, D; // Declare quotient, numerator, and divisor
N = mant1 << 26;
D = mant2 << 26;

for (int i = 0; i < 28; i++) {
  Q = Q << 1; // Multiply quotient by 2

  if (N-D < 1) {
    N = N-D;   // Set new numerator equal to difference
    Q = Q | 1; // Set LSB of quotient to 1
  }

  D = D >> 1; // Shift divider right by 1;
}

根据维基百科,该算法类似于一个名为 整数除法(无符号)和余数 的算法,但在浮点除法算法的所有其他文献中,我还没有能够找到这样一个算法的参考,最接近这个描述的是 true division 。出于这个原因,我想与社区核实这个划分算法的正确名称是什么。

额外注意事项:我知道在C和C ++中有一个浮点指令,我正在编写和测试这个算法,因为我正在为硬件设计实现它。但是,我想使用这个算法,因为它似乎有一个低的区域开销,虽然高延迟(这对我的嵌入式平台是可以的)。

谢谢

0 个答案:

没有答案