为什么pow
(math.h
或cmath
)没有返回非规范化数字?例如,这个:
float f = pow (2.f, -126);
double d = pow (2.0, -1022);
为f
和d
提供非零回答,但使用较小的指数,即f
为-127而-1023
为d
,返回零,虽然偶数2 ^ -149
(对于单曲)和2 ^ -1074
(对于双打)仍然可以表示(如IEEE-754'非规范化')。
编译器是微软的VS2008,调试配置。
答案 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);
}