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

今天看到源代码中有 

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 

求广大高手解惑

你可能感兴趣的:(float 浮点数的无效值和无限大和无限小)