tamaño parsedouble float example ejemplo java double infinity

parsedouble - java double example



¿Cómo implementar infinito en Java? (8)

¿Tiene Java algo para representar el infinito para cada tipo de datos numéricos? ¿Cómo se implementa de modo que pueda hacer operaciones matemáticas con él?

P.ej

int myInf = infinity; //However it is done myInf + 5; //returns infinity myInf*(-1); //returns negative infinity

He intentado usar números muy grandes, pero quiero una solución adecuada y fácil .


Los tipos Double y Float tienen la constante POSITIVE_INFINITY .


No estoy seguro de que Java tenga infinito para cada tipo numérico, pero para algunos tipos de datos numéricos la respuesta es positiva:

Float.POSITIVE_INFINITY Float.NEGATIVE_INFINITY

o

Double.POSITIVE_INFINITY Double.NEGATIVE_INFINITY

También puede encontrar útil el siguiente artículo que representa algunas operaciones matemáticas que implican +/- infinito: intrínsecas de números flotantes de Java .


Para los tipos de envoltura numérica.

por ejemplo, Double.POSITVE_INFINITY

Espero que esto te pueda ayudar.


Para usar Infinity , puede usar Double que admite 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);

SALIDA : -

Infinity -Infinity -Infinity Infinity NaN


Solo el tipo Doble y Float admiten la constante POSITIVE_INFINITY .


Supongo que estás usando matemáticas enteras por algún motivo. Si es así, puedes obtener un resultado que sea funcionalmente similar a POSITIVE_INFINITY utilizando el campo MAX_VALUE de la clase Integer :

Integer myInf = Integer.MAX_VALUE;

(Y para NEGATIVE_INFINITY puede usar MIN_VALUE.) Por supuesto que habrá algunas diferencias funcionales, por ejemplo, al comparar myInf con un valor que es MAX_VALUE: claramente este número no es menor que myInf .

También hay una biblioteca que en realidad tiene los campos POSITIVE_INFINITY y NEGATIVE_INFINITY, pero en realidad son solo nuevos nombres para MAX_VALUE y MIN_VALUE.


Una solución genérica es introducir un nuevo tipo. Puede ser más complicado, pero tiene la ventaja de funcionar para cualquier tipo que no defina su propio infinito.

Si T es un tipo para el que se define lteq , puede definir InfiniteOr<T> con lteq algo como esto:

class InfiniteOr with type parameter T: field the_T of type null-or-an-actual-T isInfinite() return this.the_T == null getFinite(): assert(!isInfinite()); return this.the_T lteq(that) if that.isInfinite() return true if this.isInfinite() return false return this.getFinite().lteq(that.getFinite())

Te dejo traducir esto a la sintaxis exacta de Java. Espero que las ideas sean claras; pero déjame deletrearlos de todos modos.

La idea es crear un nuevo tipo que tenga todos los mismos valores que un tipo ya existente, más un valor especial que, en la medida en que usted pueda decirlo a través de métodos públicos, actúe exactamente de la manera que desea que actúe el infinito, por ejemplo, es mayor que Algo más. Estoy usando null para representar infinito aquí, ya que parece ser el más sencillo en Java.

Si desea agregar operaciones aritméticas, decida qué deben hacer, luego impleméntelas. Probablemente sea más simple si maneja los casos infinitos primero, luego reutilice las operaciones existentes en valores finitos del tipo original.

Puede haber, o no, un patrón general sobre si es o no beneficioso adoptar una convención para manejar infinitos del lado izquierdo antes que infinitos del lado derecho o viceversa; No puedo decirlo sin probarlo, pero para menos que igual ( lteq ), creo que es más simple mirar primero el lado derecho del infinito. Observo que lteq no es conmutativo, pero add y mul son; tal vez eso es relevante.

Nota: obtener una buena definición de lo que debería suceder en valores infinitos no siempre es fácil. Es para la comparación, la suma y la multiplicación, pero tal vez no la resta. Además, hay una distinción entre infinitos números cardinales y ordinales a los que le conviene prestarle atención.


soportes double Infinity

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

huellas dactilares

Infinity NaN -Infinity

nota: Infinity - Infinity no es un número .