我有一个执行浮点除法尾数除法的算法,但我不确定下面发布的算法的正确名称是什么(例如恢复、非恢复、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++ 中有一个浮点指令,我正在编写和测试这个算法,因为我正在为硬件设计实现它。但是,我想使用这个算法,因为它的面积开销似乎很低,尽管延迟很高(这对我的嵌入式平台来说是可以的)。
谢谢