_controlfp不改变精度

时间:2011-11-22 22:35:02

标签: c++ visual-studio floating-point

下面的代码演示了这个

#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合作吗?

2 个答案:

答案 0 :(得分:3)

您确定使用旧的x87 FPU吗?我希望默认情况下使用SSE指令执行所有浮点运算;在x86_64上,没有充分的理由使用SSE。

答案 1 :(得分:0)

_MCW_PC(精确控制)ARM或x64平台不支持。

来源:http://msdn.microsoft.com/en-us/library/e9b52ceh.aspx