gpt4 book ai didi

c# - "(float)integer == integer"在 C# 中是否保证相等?

转载 作者:IT王子 更新时间:2023-10-29 04:48:50 25 4
gpt4 key购买 nike

虽然“我们都知道”x == y 可能会有问题,其中 xy 是浮点值,这个问题更具体一点:

int x = random.Next(SOME_UPPER_LIMIT);
float r = x;
// Is the following ALWAYS true?
r == x

现在,由于 float of 的 range 比整数的范围大得多(但精度不足以在边缘唯一地呈现整数),如果回答这个问题 em>还 解决了 x 的哪些值可以保证上面的内容,如果可以保证的话。


目前我的代码正在做出这个假设(对于相对较小的 x 值)- 我想确保我不会被咬 :)


这将失败并显示“不等于:16777217”(转换为 float -> 整数):

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

这段类似的代码不会失败(只有 int -> float);然而,由于转换中的损失,有几个 float 可以“等于”同一个整数,并且可能代表一个无声的错误:

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

最佳答案

是的,无论 int 是什么值,比较总是正确的。

int 将被转换为 float 以进行转换,并且第一次转换为 float 将始终给出相同的结果第二次转化。

考虑:

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

yz 的值将始终相同。如果转换丢失精度,则两个转换都将以完全相同的方式丢失精度。

如果您将 float 转换回 int 以进行比较,那就是另一回事了。


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

关于c# - "(float)integer == integer"在 C# 中是否保证相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12629087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com