gpt4 book ai didi

java - 递增原始类型的 MAX_VALUE

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:04 26 4
gpt4 key购买 nike

我试着理解下面的代码:

int i = Integer.MAX_VALUE;
double d = Double.MAX_VALUE;

System.out.println(i + ":" + (i+1));
System.out.println(d + ":" + (d+1));

输出是:

2147483647:-2147483648
1.7976931348623157E308:1.7976931348623157E308

对于第一行,i 等于最大整数,递增它会得到最小整数值。为什么 d 没有发生同样的情况?

是否有针对此行为的简单解释?

最佳答案

当 double 溢出时,它的值变为 Infinity,而不是负数。

Double.MAX_VALUE简单加1不能溢出的原因是MAX_VALUE + 1 == MAX_VALUE 因为double的精度不够计算这两个数字之间的差值。

实际上,您可以在跳转到下一个可用的双倍数之前添加相当大的数字。例如,它也不会溢出:

System.out.println(Double.MAX_VALUE + 1e100); //still Double.MAX_VALUE

如预期的那样溢出:

System.out.println(m + (Math.ulp(m) / 2)); //Infinity

关于java - 递增原始类型的 MAX_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26469115/

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