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

leechrockgames 2011-11-24 09:59:51


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创建设备,取值就为正常了.
有没有哪位大哥..遇见过..?





...全文
135 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
leechrockgames 2012-01-02
  • 打赏
  • 举报
回复
g_pD3D->CreateDevice()..创建完成后..数值才会出错..不创建..就不会.有问题.
洞凡都都 2011-11-25
  • 打赏
  • 举报
回复
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

wpalhm 2011-11-25
  • 打赏
  • 举报
回复
CreateDevice D3DCREATE_FPU_PRESERVE
Baesky 2011-11-24
  • 打赏
  • 举报
回复
int转double精度有误差。
你试试
for(int i=0;i<6;i++)
{

tttvv+=1000000000.0;//应该OK了.
printf("i:%d,tttvv:%.0f\n",i,tttvv);
}

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧