我有一个计算 2^x 的浮点表示的函数。我确实了解它的大部分内容,但是我在这个函数的嵌套 if-else 语句上遇到了一些困惑:
/* Compute 2**x */
float fpwr2(int x) {
unsigned exp, frac;
unsigned u;
if (x < -149) {
/* Too small. Return 0.0 */
exp = 0;
frac = 0;
} else if (x < -126) {
/* Denormalized result */
exp = 0;
frac = 1 << (x + 149);
} else if (x < 128) {
/* Normalized result. */
exp = x + 127;
frac = 0;
} else {
/* Too big. Return +oo */
exp = 255;
frac = 0;
}
u = exp << 23 | frac;
return u2f(u);
}
我的问题是,为什么选择那些特定的数字(-149,-126,128)?如果,我正在计算 2^x 的 64 位浮点表示,这些数字会改变吗?谢谢