前几天游戏程序爆在三角形碰撞测试里面.
结果发现是D3DXIntersectTri给我返回了一个float(-1.#INF000).
这个值相信大家都不陌生.
出现这个值的情况一般是除数为0的情况下,即分母为0.
就像这样:
float a = .7f;
float b = .0f;
a /= b;
那么如何判断一个float/double值是不是(-1.#INF000)呢?
答案是有的.
我们发现当a为-1.#INF000的时候;
a 做任意操作结果都为自身.
所以.
很简单,按上面的例子来.
当执行完a /= b; 时a已经=-1.#INF000
那么判断一下:
if (a + 1 == a - 1)
return true; // 说明是一个无效的数
其实结论是 a + 任何数 == a;
本文探讨了在游戏程序中遇到的浮点数运算问题,特别是当使用D3DXIntersectTri函数时出现(-1.#INF000)的情况。文章详细介绍了这种特殊浮点数值产生的原因,并提供了一种简单的判断方法。
191

被折叠的 条评论
为什么被折叠?



