您的位置:首页 > 其它

float 浮点数的无效值和无限大和无限小

2016-01-24 17:38 274 查看
今天看到源代码中有

void Unit::SetPosition(float x, float y)

{

ASSERT(x == x);

ASSERT(y == y);

。。。。。

这样的判断 以前只知道两个浮点数不能用==判断 不明白一个浮点数为什么要做相等判断

百度科普了下

浮点数计算的时候可能产生-1.#IND000 无限小 例( acos(1.0001f)) 或者无限大 1.#IND000
或者无效值 1.#INF000 例(10 / 0)

当浮点数等于 -1.#IND000
或 1.#IND000 可以用

ASSERT(x
== x); 判断是否是个无效的数

但是 1.#INF000
确不能判断

#define
InvalidDouble *(double*)("\xff\xff\xff\xff\xff\xff\xef\x7f")

图中 b的判断进不去 实在困惑

_isnan(b); 也无法判断

打印b已经是 1.#INF000

求广大高手解惑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: