下面的代码演示了这个
#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合作吗?
答案 0 :(得分:3)
您确定使用旧的x87 FPU吗?我希望默认情况下使用SSE指令执行所有浮点运算;在x86_64上,没有充分的理由不使用SSE。
答案 1 :(得分:0)
_MCW_PC(精确控制)ARM或x64平台不支持。