¿Java tiene algo que represente el infinito para cada tipo de datos numéricos? ¿Cómo se implementa de modo que pueda realizar 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 .

∞-∞==0ser verdad? Y también: ¿Por qué necesitas tal cosa?Respuestas:
doublesoporta Infinityhuellas dactilares
nota: no
Infinity - Infinityes un número .fuente
floatsiempre que sea posible ya que su precisión es bastante pobre. ;)Supongo que estás usando matemáticas enteras por una razón. Si es así, puede obtener un resultado funcionalmente similar al POSITIVE_INFINITY utilizando el campo MAX_VALUE de la
Integerclase:(Y para NEGATIVE_INFINITY, podría usar MIN_VALUE.) Por supuesto, habrá algunas diferencias funcionales, por ejemplo, cuando se compara
myInfcon un valor que resulta ser MAX_VALUE: claramente este número no es menor quemyInf.También hay una biblioteca que en realidad tiene campos POSITIVE_INFINITY y NEGATIVE_INFINITY, pero en realidad son nombres nuevos para MAX_VALUE y MIN_VALUE.
fuente
Integer.MAX_VALUEcomo infinito en lugar deDouble.POSITIVE_INFINITYdecir que son 'funcionalmente casi iguales', entonces cuál es la diferencia?Integer.MAX_VALUEtodavía es finito, es solo un truco para imitar el infinito. Además,Integer.MAX_VALUEsolo tiene 32 bits, mientras queDouble.POSITIVE_INFINITYes de 64 bits.Para usar
Infinity, puede usarDoublequé soportesInfinity: -SALIDA : -
fuente
Los tipos
DoubleyFloattienen laPOSITIVE_INFINITYconstante.fuente
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:
o
También puede resultarle útil el siguiente artículo, que representa algunas operaciones matemáticas que involucran +/- infinito: complejidades de números de punto flotante de Java .
fuente
Solo el tipo Double y Float admite
POSITIVE_INFINITYconstante.fuente
Para los tipos de envoltorio numérico.
por ejemplo, Double.POSITVE_INFINITY
Espero que esto te pueda ayudar.
fuente
Una solución genérica es introducir un nuevo tipo. Puede estar más involucrado, pero tiene la ventaja de trabajar para cualquier tipo que no defina su propio infinito.
Si
Tes un tipo para el quelteqestá definido, puede definirloInfiniteOr<T>conlteqalgo como esto:Dejaré que traduzca 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 algunos tipos ya existentes, más un valor especial que, por lo que puede ver a través de métodos públicos, actúa exactamente de la manera en que desea que actúe el infinito, por ejemplo, es mayor que Algo más. Estoy usando
nullpara representar el infinito aquí, ya que eso parece lo más sencillo en Java.Si desea agregar operaciones aritméticas, decida qué deben hacer, luego implemente eso. Probablemente sea más simple si maneja los casos infinitos primero y luego reutiliza las operaciones existentes en valores finitos del tipo original.
Puede haber o no un patrón general para determinar si es beneficioso o no adoptar una convención para manejar los infinitos del lado izquierdo antes que los infinitos del lado derecho o viceversa; No puedo decirlo sin probarlo, pero para menos que o igual (
lteq) creo que es más simple mirar primero el infinito del lado derecho. Tomo nota de quelteqes no conmutativo, peroaddymulson; Quizás eso sea relevante.Nota: proponer una buena definición de lo que debería suceder en valores infinitos no siempre es fácil. Es para comparación, suma y multiplicación, pero tal vez no para resta. Además, hay una distinción entre los números cardinales y ordinales infinitos a los que puede prestar atención.
fuente
-(yourvalue)funcione correctamente. Y eso también le permitiría apoyar el concepto NaN (no un número). Aparte de eso, agregar valores especiales sobre los tipos integrales puede ser una buena idea, particularmente cuando la aplicación necesita semánticas que son violadas por números de punto flotante.Como el número de clase no es definitivo, aquí hay una idea que aún no encuentro en las otras publicaciones. A saber, subclasificar el número de clase.
Esto de alguna manera entregaría un objeto que puede ser tratado como infinito para Integer, Long, Double, Float, BigInteger y BigDecimal.
Como solo hay dos valores, podríamos usar el patrón singleton:
De alguna manera, creo que los métodos restantes intValue (), longValue () etc. deberían ser anulados para arrojar excepciones. Para que el valor de infinito no se pueda usar sin más precauciones.
fuente
Soy un principiante en Java ... Encontré otra implementación para el infinito en la documentación de Java, para los tipos
booleanydouble. https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3Se ve feo, pero funciona.
fuente