如何在Java中实现无穷大?

use*_*100 127 java double infinity

Java是否有能代表每种数值数据类型的无穷大?它是如何实现的,以便我可以用它进行数学运算?

例如

int myInf = infinity; //However it is done
myInf + 5; //returns infinity
myInf*(-1); //returns negative infinity
Run Code Online (Sandbox Code Playgroud)

我尝试使用非常大的数字,但我想要一个合适的,简单的解决方案.

Pet*_*rey 173

double 支持无限

double inf = Double.POSITIVE_INFINITY;
System.out.println(inf + 5);
System.out.println(inf - inf); // same as Double.NaN
System.out.println(inf * -1); // same as Double.NEGATIVE_INFINITY
Run Code Online (Sandbox Code Playgroud)

版画

Infinity
NaN
-Infinity
Run Code Online (Sandbox Code Playgroud)

注意:Infinity - Infinity不是一个数字.

  • 我尽量避免使用`float`,因为它的精度很差.;) (20认同)
  • 实际上也是"漂浮". (3认同)
  • 实现像Dijkstra这样的算法让我怀疑POSITIVE_INFINITY是否<POSITIVE_INFINITY. (3认同)
  • 实际上不是。 (2认同)

Joh*_*hnK 31

我假设你使用整数数学是有原因的.如果是这样,您可以通过使用类的MAX_VALUE字段获得与POSITIVE_INFINITY功能几乎相同的结果Integer:

Integer myInf = Integer.MAX_VALUE;
Run Code Online (Sandbox Code Playgroud)

(对于NEGATIVE_INFINITY,您可以使用MIN_VALUE.)当然会有一些功能上的差异,例如,当比较myInf恰好是MAX_VALUE的值时:显然这个数字不小于myInf.

还有一个库实际上有字段POSITIVE_INFINITY和NEGATIVE_INFINITY,但它们实际上只是MAX_VALUE和MIN_VALUE的新名称.

  • Integer.MAX_VALUE + 5多少钱? (10认同)
  • Integer.MAX_VALUE + 5包含在负整数中.Integer.MAX_VALUE + 5 = Integer.MIN_VALUE + 4 = -2147483644. (7认同)
  • Integer.MAX_VALUE 是可在您的输入中使用的有效数字。op 要求无穷大,这不是一个数字,而是一个数学符号。 (2认同)

Roh*_*ain 11

要使用Infinity,您可以使用Double哪些支持Infinity: -

    System.out.println(Double.POSITIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY * -1);
    System.out.println(Double.NEGATIVE_INFINITY);

    System.out.println(Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY);
Run Code Online (Sandbox Code Playgroud)

输出: -

Infinity
-Infinity
-Infinity

Infinity 
NaN
Run Code Online (Sandbox Code Playgroud)


小智 6

整数无穷大:

  Integer maxNumber = Integer.MAX_VALUE
Run Code Online (Sandbox Code Playgroud)

双无穷大

  Double maxNumber = Double.MAX_VALUE;
  Double positiveInf = Double.POSITIVE_INFINITY;
  Double negativeInf = Double.NEGATIVE_INFINITY
Run Code Online (Sandbox Code Playgroud)

浮动无穷大

   Float positiveInf = Float.POSITIVE_INFINITY;
   Float negativeInf = Float.NEGATIVE_INFINITY
   Float maxNumber = Float.MAX_VALUE;
Run Code Online (Sandbox Code Playgroud)

  • 我认为 Integer.MAX_VALUE 是一个可实现的值,因此它可以与可表示的位数相匹配。这并不总是很重要,因为更大的数字是不可能的,因为 +1 会溢出到 Integer.MIN_VALUE。不过,这和Infinity不太一样吧? (2认同)

Tud*_*dor 5

DoubleFloat类型具有POSITIVE_INFINITY恒定的。

  • “它们的最大值比整数的最大值更接近无穷大,但相差不远。” 任何有限数都是无穷远,无穷远;) (5认同)
  • @ PatrickBrinich-Langlois浮点类型(例如double和float)通常能够直接表示无穷大(即,有一种位模式专门表示“无穷大”,与该类型的最大值不同)。Double和Float具有与Integer相同的MAX_VALUE。 (3认同)