今天看到源代码中有
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
求广大高手解惑