【问题标题】:How to check if a calculation result is Infinite or not? [duplicate]如何检查计算结果是否为无限? [复制]
【发布时间】:2017-07-12 06:17:15
【问题描述】:

我的代码时不时地计算一个 double 并返回 Infinite。代码不会卡住,我什至可以在代码保存的 .csv 文件中看到这些结果(“Infinite”一词写在 .csv 文件中)。

但我想避免我的代码进一步使用这个无限结果,所以我必须检测结果是否是无限的。我该怎么做?

我尝试了类似的东西

if(a==Infinite){    }

if(a.isInfinite()){    }

但这些似乎都不是正确的代码。

【问题讨论】:

  • @Tunaki 您所指的问题不是关于无穷大,而是关于逗号后有无限位数的双精度数(类似于 4/3 = 1.333333)。我找到了这个问题,但它没有解决我的问题。
  • 不,不是,它是在谈论一个双值是无限的,答案是使用Double.isInfinite(double),就像在这里接受的那样。那里没有提到具有无限十进制表示的双精度值。
  • 好的,抱歉,现在可以了。要么我疯了,要么你改变了链接。
  • 我没有更改链接,没有(你有the history here)。发生点击错误:)!

标签: java infinite


【解决方案1】:

如果你有一个原始的double 然后使用

a == Double.POSITIVE_INFINITY || a == Double.NEGATIVE_INFINITY

作为无穷大的检验。请注意,如果您的无穷大是浮点除以零的结果,那么您还应该检查

Double.NAN

这将是0.0 / 0.0 的结果。不幸的是,所有内容都将falseNaN(包括NaN 本身)进行比较,因此您需要为此使用Double.isNaN(a)


然后将整个内容装箱并使用Double.isFinite(a),对于+Infinity、-Infinity 和NaN,它将为false,在所有其他情况下为true

【讨论】:

  • 我不确定您是否需要在这里处理NaN。 OP并没有说它是;是因为他们没有考虑这个案子,还是真的不想处理,还不清楚。
  • 我只是想提供帮助 ;-)
  • 我认为你是;我只是说您可能在这里添加自己的要求。另外,在 Double.isInfinite 上使用显式比较是没有意义的。
  • 我把它放进去只是为了让那些认为你不能在浮点中使用== 的乳蛋饼食客们思考一下。但我同意你的观点,使用函数是优越的。尤其是在 C++ 中,浮点类型的规范要宽松得多。
  • 您是否将 IDE 中的源版本设置为版本 8?
【解决方案2】:

阅读Javadoc

public static boolean isInfinite(double v)

如果指定的数字是无限大的,则返回真,否则返回假。

所以,类似:

if (Double.isInfinite(myValue)) { ... }

【讨论】:

  • OP 是在询问数字是否无限,而不是数字是否不是有限的。我已经评论了您对此的回答。
猜你喜欢
  • 2017-11-19
  • 2020-04-09
  • 2016-04-14
  • 2018-01-31
  • 2017-08-18
  • 1970-01-01
  • 2013-05-09
  • 2014-04-13
相关资源
最近更新 更多