gpt4 book ai didi

java - 为什么 Java 中 -Infinity +Infinity 的平方根是平方根?

转载 作者:IT老高 更新时间:2023-10-28 20:52:54 27 4
gpt4 key购买 nike

我尝试了两种不同的方法在 Java 中求平方根:

Math.sqrt(Double.NEGATIVE_INFINITY); // NaN
Math.pow(Double.NEGATIVE_INFINITY, 0.5); // Infinity

为什么第二种方式不返回预期的答案 NaN(与第一种方式相同)?

最佳答案

返回一个 NaN(根据 IEEE 754),以便在获得真正未定义的(中间)结果时继续计算。返回一个infinity,以便在发生溢出后继续计算。

因此行为

Math.sqrt(Double.NEGATIVE_INFINITY); // NaN

被指定是因为它知道(很容易并且很快)已经生成了一个未定义的值;仅基于参数的符号。

然而表达式的评估

Math.pow(Double.NEGATIVE_INFINITY, 0.5); // Infinity

同时遇到溢出和无效操作。然而,无效操作识别关键取决于第二个参数的确定有多准确。如果第二个参数是先前舍入运算的结果,则它可能不是精确 0.5。因此,为了避免结果严重依赖第二个参数的准确性,返回不太严重的确定,即溢出识别。

有关 IEEE 754 标准背后的一些推理的更多详细信息,包括返回标志值而不是生成异常背后的推理,请参阅

What Every Computer Scientist Should Know About Floating-Point Arithmetic (1991, David Goldberg) ,

这是附录D

Sun Microsystems Numerical Computation Guide .

关于java - 为什么 Java 中 -Infinity +Infinity 的平方根是平方根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48020069/

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