下面的代码演示了这一点
#include <float.h>
#include <stdint.h>
#pragma fenv_access(on) // apparently ineffective
int main(int argc, char **argv)
{
uint32_t cw;
cw = _controlfp(0,0); // cw = 0x0008001f
cw = _controlfp(_PC_24,_MCW_PC); // cw = SAME!
cw = _controlfp(_PC_53,_MCW_PC); // cw = STILL THE SAME!
return 0;
}
我需要设置工作精度,因为很多旧的网格生成代码都取决于它。在迁移到64位之前,我加入了
fstcw [cur_cw]
等...,一切都很好。但是,由于vs2010不支持64位目标的内联汇编,因此看来我唯一可行的解决方案是为此目的创建一个单独的.asm文件。我还不知道还有另一个魔术记录不到的编译器选项,它会使_controlfp合作吗? 最佳答案
您确定使用的是旧的x87 FPU吗?我希望默认情况下所有浮点都将使用SSE指令执行;在x86_64上,没有充分的理由不使用SSE。
关于c++ - _controlfp不更改精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8234873/