D3DCREATE_FPU_PRESERVE

4/15/2008 6:29:21 AM

  在FPU中,却存在着三种运算精度:single precision(24bits),double precision(53bits)(一般应用程序启动时的精度),double extended precision(64bits,很少用)。FPU的默认精度是53bits的double precision。D3D的CreateDevice函数调用后会将FPU的运算精度改成24bits。除非指定了D3DCREATE_FPU_PRESERVE参数,否则不能你的应用程序浮点精度也会降低。
  悲剧的是你不能确认dx或者其他3d程序是否给你切换回来,特别调试时候经常非正常退出,感觉有些dx版本或者显卡硬件可能也有bug,即使设置D3DCREATE_FPU_PRESERVE也不能保证切换回来。这时我们需要手动切换
    unsigned int uiFloat;
    _controlfp_s(&uiFloat, 0, 0);
    _controlfp_s(0, _PC_53, MCW_PC);  //切换到double精度

    .......
    _controlfp_s(0, uiFloat, MCW_PC);  //切换到原来的精度

crt 运行库默认是double精度的

posted on 2010-10-08 15:30  阿蒙1024  阅读(1293)  评论(0)    收藏  举报

导航