游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2009|回复: 3

Directx对double数值计算会truncat吗?

[复制链接]

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-7-19 13:07:00 | 显示全部楼层 |阅读模式
不知道谁遇见过这样的问题
在directx初始化之前,所有的计算都是正确的
例如:
double a1, a2, a3;
a1=1000000;
a2=0.00001;
a3=a1+a2;  //此时a3=1000000.00001;


g_pD3D->CreateDevice(
            D3DADAPTER_DEFAULT,
            D3DDEVTYPE_HAL,
            hWnd,
            D3DCREATE_SOFTWARE_VERTEXPROCESSING,
            &d3dpp,
            &g_pd3dDevice)
            )
调用成功后,所有的double类型数值计算就都变成float了,
a3=a1+a2;  //此时a3=1000000.0000;因为在float中的阶数不足以同时表达两个相差太大的数
小数计算也有同样的问题,只是不明显而以,例如0.001+0.001=0.00199....而不再等于0.002

我用它自带的例子也是如此
是我的系统有问题,还是dx有问题?

为什么呢? 各位高手快帮忙啦~

我的开发环境vc6+sp5/dxsdk9b/xp+sp2

[em7]

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2008-7-20 10:05:00 | 显示全部楼层

Re:Directx对double数值计算会truncat吗?

或许。。尝试一下vs2005 or 2008..

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2008-7-20 17:49:00 | 显示全部楼层

Re:Directx对double数值计算会truncat吗?

CreateDevice 里加参数 D3DCREATE_FPU_PRESERVE 可以保证精度,不过要牺牲效率,具体可查看DirectX帮助

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-7-20 22:14:00 | 显示全部楼层

Re: Re:Directx对double数值计算会truncat吗?

njutiger: Reirectx对double数值计算会truncat吗?   

CreateDevice 里加参数 D3DCREATE_FPU_PRESERVE 可以保证精度,不过要牺牲效率,具体可查看DirectX帮助



正解!谢了兄弟!
郁闷了好几天~ [em3] [em2] [em1] [em16]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 23:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表