为什么Java中的-Infinity + Infinity的平方根? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Java中的-Infinity + Infinity的平方根? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我尝试了两种不同的方法来在Java中找到平方根:
Math.sqrt(Double.NEGATIVE_INFINITY); // NaN
Math.pow(Double.NEGATIVE_INFINITY, 0.5); // Infinity
为什么第二种方式不能返回NaN
的预期答案(与第一种方式相同)?
返回NaN(在IEEE 754下),以便在获得真正未定义(中间)结果时继续计算。返回无穷大以便在发生溢出后继续计算。
这样的行为
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。
它只是在documentation的Math
中描述。
对于Math.sqrt
:
如果参数为NaN或小于零,则结果为NaN。
对于Math.pow
:
如果
- 第一个参数是负零,第二个参数小于零但不是有限的奇数,或者
- 第一个参数是负无穷大,第二个参数大于零但不是有限的奇数,
然后结果是正无穷大。
至于他们为什么做出这样的设计选择 - 你将不得不问java的作者。
以上是关于为什么Java中的-Infinity + Infinity的平方根? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
JSON 省略了 Infinity 和 NaN; ECMAScript 中的 JSON 状态?
JSON 省略了 Infinity 和 NaN; ECMAScript 中的 JSON 状态?