虽然“我们都知道”可能有问题,浮点值x == y
在哪里x
和是,这个问题更具体一点:y
int x = random.Next(SOME_UPPER_LIMIT);
float r = x;
// Is the following ALWAYS true?
r == x
现在,由于float 的范围比整数的范围大得多(但精度不足以在边缘唯一地呈现整数),如果对这个问题的回答也解决了上面的哪些值x
可以保证,如果可以保证的话。
目前我的代码正在做这个假设(对于相对较小的 x 值) - 我想确保我不会被咬 :)
这将失败并显示“不等于:16777217”(cast float -> int):
for (int i = 0; i < int.MaxValue; i++) {
float f = i;
if ((int)f != i) throw new Exception("not equal " + i);
}
这个类似的代码不会失败(只有 int -> float);但是,由于转换中的损失,有几个浮点数可以“等于”相同的 integer,并且可能代表一个静默错误:
for (int i = 0; i < int.MaxValue; i++) {
float f = i;
if (f != i) throw new Exception("not equal " + i);
}