首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

vc double遇上创建D3D9创建设备,取值出有关问题了

2013-03-26 
vc double遇上创建D3D9创建设备,取值出问题了.if(FAILED(hr g_pD3D-CreateDevice(D3DADAPTER_DEFAULT,D

vc double遇上创建D3D9创建设备,取值出问题了.



if(FAILED(hr = g_pD3D->CreateDevice(
                       D3DADAPTER_DEFAULT, 
                       D3DDEVTYPE_HAL, hWnd, Flags, 
                       &d3dpp, &g_pd3dDevice)))
      return hr;


//double tttvv=123456789123456789;
double tttvv=10000000000000;//double可取值16位-18位

for(int i=0;i<6;i++)
{
     //  tttvv+=12345678912345;
tttvv+=1000000000;//当值超过20亿时,数值就会计错数了.
printf("i:%d,tttvv:%.0f\n",i,tttvv);
}

     程序运行结果:tttvv=10006001876992;
     正确结果结果:tttvv=10006000000000;
     我想,为什么会计算出错呢.是因为创建D3D9创建设备,取值最大为long型.
     如果不创建D3D9创建设备,取值就为正常了.
     有没有哪位大哥..遇见过..?
 





[解决办法]
int转double精度有误差。
你试试
for(int i=0;i<6;i++)
    {

        tttvv+=1000000000.0;//应该OK了.
        printf("i:%d,tttvv:%.0f\n",i,tttvv);
    }
[解决办法]
CreateDevice D3DCREATE_FPU_PRESERVE
[解决办法]
VC++下没有问题
double tttvv=10000000000000;//double可取值16位-18位

CString dd ;
    for(int i=0;i<6;i++)
    {
         //  tttvv+=12345678912345;
        tttvv+=1000000000;//当值超过20亿时,数值就会计错数了.
dd.Format("i:%d-tttvv:%.0f",i,tttvv);
        //printf("i:%d,tttvv:%.0f\n",i,tttvv);
m_str += dd ;
    }


结果:i:0-tttvv:10001000000000i:1-tttvv:10002000000000i:2-tttvv:10003000000000i:3-tttvv:10004000000000i:4-tttvv:10005000000000i:5-tttvv:10006000000000

热点排行