`pow`不返回(IEEE)非规范化浮点数?

时间:2011-02-15 12:03:32

标签: c++ c

为什么powmath.hcmath)没有返回非规范化数字?例如,这个:

float f = pow (2.f, -126);
double d = pow (2.0, -1022);

fd提供非零回答,但使用较小的指数,即f为-127而-1023d,返回零,虽然偶数2 ^ -149(对于单曲)和2 ^ -1074(对于双打)仍然可以表示(如IEEE-754'非规范化')。

编译器是微软的VS2008,调试配置。

1 个答案:

答案 0 :(得分:2)

听起来VC正在刷新非正规。这可以通过以下方式控制:

#include <float.h>
#pragma fenv_access (on)

int main()
{
    _controlfp(_DN_SAVE, _MCW_DN);
    float f = pow (2.f, -127);
    double d = pow (2.0, -1023);
}