我有一个算法为浮点分区执行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 ++中有一个浮点指令,我正在编写和测试这个算法,因为我正在为硬件设计实现它。但是,我想使用这个算法,因为它似乎有一个低的区域开销,虽然高延迟(这对我的嵌入式平台是可以的)。
谢谢