我似乎找不到以下代码中断的原因:
从我的角度来看,整数 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/