首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为何D3D中CreateDevice之后浮点数计算出现很大误差

2012-11-03 
为什么D3D中CreateDevice之后浮点数计算出现很大误差很简单的一段代码,在多个项目中测试,只要有这一句代码

为什么D3D中CreateDevice之后浮点数计算出现很大误差
很简单的一段代码,在多个项目中测试,只要有这一句代码就会出问题

C/C++ code
    {        double ddd=106002223;        ddd/=100;        char szBuf[64];        sprintf(szBuf,"%f",ddd);        MessageBox(NULL,szBuf,"",0);    }    //创建设备    if(D3D_OK!=g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,        D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pD3DDevice))    {    MessageBox(NULL,"创建设备失败!","失败!",MB_OK|MB_ICONERROR);    return E_FAIL;    }    {        double ddd=106002223;        ddd/=100;        char szBuf[64];        sprintf(szBuf,"%f",ddd);        MessageBox(NULL,szBuf,"",0);    }

以上2次的结果分别为:1060022.23和1062222.25,这个误差是不是太大了一点,不是说DOUBLE型的精度是在15到16位吗?
当然最主要的是为什么创建D3D设备前后会有这么大的差别?

[解决办法]
FPU的方式被修改
注意第四个参数, 有个 D3DCREATE_FPU_PRESERVE MSDN这个有说明

Indicates that the application needs either double-precision floating-point unit (FPU) or FPU exceptions enabled. Microsoft® Direct3D® sets the FPU state each time it is called. 
By default, the pipeline uses single precision. Be sure to use this flag to get double precision. Setting the flag will reduce Direct3D performance.


热点排行