首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么-Infinity +Infinity在Java中是平方根?

为什么-Infinity +Infinity在Java中是平方根?
EN

Stack Overflow用户
提问于 2017-12-29 09:06:24
回答 2查看 3.8K关注 0票数 36

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

代码语言:javascript
复制
Math.sqrt(Double.NEGATIVE_INFINITY); // NaN
Math.pow(Double.NEGATIVE_INFINITY, 0.5); // Infinity

为什么第二个方法不返回预期的答案,即NaN (与第一个方法相同)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-29 14:08:33

返回NaN (在IEEE 754下),以便在获得真正未定义(中间)结果时继续计算。返回无穷大,以便在发生溢出后继续计算。

这样的行为

代码语言:javascript
复制
Math.sqrt(Double.NEGATIVE_INFINITY); // NaN

之所以指定此值,是因为已知(轻松和快速)已经生成了一个未定义的值;仅基于参数的符号。

然而,对表达式的评估

代码语言:javascript
复制
Math.pow(Double.NEGATIVE_INFINITY, 0.5); // Infinity

同时遇到溢出和无效操作。然而,无效操作识别在很大程度上取决于第二个参数的确定是否准确。如果第二个参数是先前舍入操作的结果,那么它可能不是 0.5。因此,返回不太严重的判断,即对溢出的识别,以避免结果对第二个参数的准确性的临界依赖。

有关IEEE 754标准背后的一些推理的其他详细信息,包括返回标志值而不是生成异常的推理,可在

的附录D。

太阳微系统数值计算指南

票数 49
EN

Stack Overflow用户

发布于 2017-12-29 09:14:01

它的作用就像“文档 of Math”中描述的那样。

对于Math.sqrt

如果参数为NaN或小于零,则结果为NaN。

对于Math.pow

如果

  • 第一个参数是负零,第二个参数小于零,但不是一个有限奇数,或者
  • 第一个参数是负无穷大,第二个参数大于零,但不是一个有限奇数,

则结果为正无穷大。

至于他们为什么要做出这样的设计选择--你得问一下java的作者。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48020069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档