0

我有一个执行浮点除法尾数除法的算法,但我不确定下面发布的算法的正确名称是什么(例如恢复、非恢复、SRT)。

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

但是,我使用维基百科中的这个算法来划分尾数:(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;
}

该算法类似于根据维基百科称为 带余数的整数除法(无符号),但在浮点除法算法的所有其他文献中,我无法找到对这种算法的引用,似乎最接近匹配这种描述是真实的划分。出于这个原因,我想与社区核实一下这个除法算法的正确名称是什么。

额外说明:我知道 C 和 C++ 中有一个浮点指令,我正在编写和测试这个算法,因为我正在为硬件设计实现它。但是,我想使用这个算法,因为它的面积开销似乎很低,尽管延迟很高(这对我的嵌入式平台来说是可以的)。

谢谢

4

0 回答 0