我的 C++ 代码中有一个 double 值:
double inch = 25.399999618530273;
在计算中使用时,它被加载到 FPU st0 寄存器中,使用
fldl -0x90(%ebp)
我可以看到 -0x90(%ebp) 处的 double 是正确的值。然而,在 FLDL 之后,它在 st0 寄存器中显示为 long double 值 25.3999996185302734375,即使我使用 -mpc64 -mfpmath=387 编译并在计算和 fldl 命令之前立即将 FPU 手动设置为双精度:
fpu_control_t cw;
_FPU_GETCW(cw);
cw &= ~_FPU_EXTENDED;
cw |= _FPU_DOUBLE;
_FPU_SETCW(cw);
您能否解释一下,为什么在 _FPU_DOUBLE 模式下 FPU 寄存器仍处于扩展精度模式以及如何解决这个问题?
或者它只是显示为 long double(我在 Eclipse CDT 中查看寄存器),但实际上是在内部没有这些额外数字的情况下运行的?