gpt4 book ai didi

java - 升级和比较

转载 作者:行者123 更新时间:2023-12-02 07:26:59 25 4
gpt4 key购买 nike

我似乎找不到以下代码中断的原因:

从我的角度来看,整数 lbnd 减少了

public class Test {
public static void main(String[] args) {
methode1();
}
static void methode1() {
int ubnd = Integer.MAX_VALUE;
int lbnd = ubnd;

while ((float)lbnd == (float)ubnd) {
--lbnd;
}
System.out.println((++lbnd) + ".." + ubnd);
}
}

问题是,从我所看到的来看,这个循环应该是一个无限循环,但是它在 64 个循环后中断,因为整数的值发生了变化。结果是:

2147483584..2147483647

但它应该是一个无限循环:

2147483647..2147483647

最佳答案

请记住, float 没有足够的精度来精确存储整数的所有 32 位。因此,对于高量级整数,出于浮点比较的目的,(float) i 和 (float) (i-1) 是相同的。

(顺便说一句,当比较 int 和 float 时,它将被视为 float 比较。因此,为了说明一个额外的陷阱,您甚至不需要将强制转换浮在 == 比较的一侧。)

关于java - 升级和比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444891/

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