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 ビット浮動小数点表現を計算している場合、それらの数値は変更されますか? どうも