我在我的C具有双值++代码:FPU命令FLD1启动转换双长一倍ST0
double inch = 25.399999618530273;
当在计算中使用,它是使用加载到FPU ST0寄存器
fldl -0x90(%ebp)
我可以看到在-0x90(%ebp)下的双精度值是正确的。然而FLD1启动后,它显示为长双值25.3999996185302734375在ST0寄存器,即使我编译-mpc64 -mfpmath = 387和手动设置FPU立即计算和FLD1启动命令之前,双精度:
fpu_control_t cw;
_FPU_GETCW(cw);
cw &= ~_FPU_EXTENDED;
cw |= _FPU_DOUBLE;
_FPU_SETCW(cw);
你可以请解释为什么在_FPU_DOUBLE模式下FPU寄存器仍处于扩展精度模式,以及如何解决这个问题?
或者它只是出现只要双(我在Eclipse CDT中查看寄存器),但实际上在内部没有这些额外的数字操作?
我不得不承认,我还没有读过“每位程序员应该知道什么浮点算术”的圣经。 – queen3 2013-03-13 13:35:10