在Java中比较无限大数值

10

在Java中,以下表达式返回什么?

Math.max(Float.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);

我在一个网站上看到了这个问题,答案是Double.POSITIVE_INFINITY。 我对这个答案不确定,因为我们如何比较两个无限大?有人能解释一下吗?谢谢。


请注意,Math.min()也会返回Double.POSITIVE_INFINITY ;) - dimo414
4个回答

26

Float.POSITIVE_INFINITY返回float类型,而Double.POSITIVE_INFINITY返回double类型。

没有叫做Math.max(float, double)的方法,只有Math.max(float, float)和Math.max(double, double)。

因此,当调用方法Math.max(float, double)时,它会将float参数转换为double类型,并调用Math.max(double, double)方法,因此返回Double.POSITIVE_INFINITY。

Java不会将double类型转换为float类型,因为这可能会导致精度问题。


这是强制多态的一个例子,不是吗? - sv_in

2
当然,你可以比较无限大的数字。 除非你涉及到具有不同程度的无限大的超限数系统,否则无限大就是一个没有限制的数字。
两个没有限制的数字的最大值/总和/乘积/平均值也是一个没有限制的数字。

1
从数学角度来看,无穷大不是一个数字...但在这里它只表示一个比double可表示的任何数字都要大的“特殊数字样东西”,对吧? - Display Name

1

我认为您会发现,使用双精度和单精度类型定义的特殊值进行的所有操作都在IEEE浮点数规范中定义。大多数编程语言和几乎所有CPU都遵循该标准。


-1
关于数学上是否可以比较无限大的问题,最好由更具数学素养的人来回答。但我认为在Float.POSITIVE_INFINITY与Double.POSITIVE_INFINITY的情况下,Double比Float更大,而POSITIVE_INFINITY常量只是每种数据类型的最大可能值。

不只是每种数据类型的最大可能值。IEEE754浮点数具有保留值,表示正无穷大和负无穷大(以及NaN),而不是类似于Double.MAX_VALUE的最大可能值。 - Aaron Maenpaa
这并不是真的。请阅读IEEE754规范。 - Daniel Cassidy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接