gpt4 book ai didi

Java - 当多个 double 都是小而长的小数时,它们加在一起等于无穷大

转载 作者:行者123 更新时间:2023-12-01 11:49:32 27 4
gpt4 key购买 nike

我有一行代码,将几个 double 相加,得到的结果是无穷大,而 double 都只是小而长的小数

a = -1.536709757154733E308
b = 2.102331119338414E156
c = 0.2

d = a - b + (a * c)
d = -1.536709757154733E308 - 2.102331119338414E156 + (-1.536709757154733E308 * 0.2)
d = -infinity

有谁知道为什么会这样吗?任何帮助将不胜感激

PS 在这段代码中使用大小数是不可行的,并且由于每次运行时“a”和“b”会随机变化

最佳答案

发生溢出。表达式 a - b + (a * c) 结果的大小大于可能的最大 doubleDouble.MAX_VALUE、或1.7976931348623157E308。当这种情况发生时,结果是无穷大。由于 a 为负数,因此结果为 -Infinity

如果将 ab 的指数减少 1,您就会看到这一点:

-1.8440517085856795E307

在结果中再次将指数增加 1 将产生比最大可能值更大的值。

您仍然可以使用BigDecimal

BigDecimal a =  new BigDecimal(-1.536709757154733E308);
BigDecimal b = new BigDecimal(2.102331119338414E156);
BigDecimal c = new BigDecimal(0.2);

System.out.println(a.add(b).add(a.multiply(c)));

关于Java - 当多个 double 都是小而长的小数时,它们加在一起等于无穷大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28905503/

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