是“(float)integer == integer”在C#中保证相等?

前端之家收集整理的这篇文章主要介绍了是“(float)integer == integer”在C#中保证相等?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
虽然“我们都知道”,x == y可能是有问题的,其中x和y是浮点值,这个问题有点更具体:
int x = random.Next(SOME_UPPER_LIMIT);
float r = x;
// Is the following ALWAYS true?    
r == x

现在,由于float的范围远远大于整数的范围(但是精度不足以在边缘唯一地呈现整数),如果对这个问题的回答也解决了上述哪个值可以被保证,那将是很好的因为,如果可以保证。

目前我的代码正在做这个假设(对于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);然而,由于转换的损失,有几个浮点可以“相等”相同的整数,可能代表一个无声的错误

for (int i = 0; i < int.MaxValue; i++) {
   float f = i;
   if (f != i) throw new Exception("not equal " + i);
}

解决方法

是的,比较将永远是真的,无论int是什么。

int将被转换为浮点数进行转换,第一次转换为float将总是给出与第二次转换相同的结果。

考虑:

int x = [any integer value];
float y = x;
float z = x;

y和z的值总是相同的。如果转换失去精度,则两种转换都将以完全相同的方式失去精度。

如果将float返回到int来进行比较,那又是另一回事。

另外请注意,即使转换为浮点数的特定int值总是导致相同的浮点值,这并不意味着float值必须对于该int值是唯一的。有一些int值,其中(float)x ==(float)(x 1)将为true。

猜你在找的CSS相关文章