Hoe kan ik oneindigheid in Java implementeren?

Heeft Java iets om oneindigheid voor te stellen voor elk numeriek gegevenstype? Hoe wordt het zo geïmplementeerd dat ik er wiskundige bewerkingen mee kan uitvoeren?

Bijvoorbeeld

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

Ik heb geprobeerd zeer grote getallen te gebruiken, maar ik wil een goede, eenvoudigeoplossing.


Antwoord 1, autoriteit 100%

Doubleondersteunt 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

afdrukken

Infinity
NaN
-Infinity

opmerking: Infinity - Infinityis Not A Number.


Antwoord 2, autoriteit 24%

Ik neem aan dat je met een reden integere wiskunde gebruikt. Als dat zo is, kunt u een resultaat krijgen dat functioneel bijna hetzelfde is als POSITIVE_INFINITY door het veld MAX_VALUE van de klasse Integerte gebruiken:

Integer myInf = Integer.MAX_VALUE;

(En voor NEGATIVE_INFINITY zou u MIN_VALUE kunnen gebruiken.) Er zullen natuurlijk enkele functionele verschillen zijn, bijvoorbeeld wanneer u myInfvergelijkt met een waarde die toevallig MAX_VALUE is: dit aantal is duidelijk niet minder dan myInf. Zoals opgemerkt in de opmerkingen hieronder, zal het verhogen van positief oneindig je terugbrengen naar negatieve getallen (en het verlagen van negatief oneindig zal je terug naar positief brengen).

Er is ook een bibliotheek die eigenlijk velden POSITIVE_INFINITY en NEGATIVE_INFINITY heeft, maar het zijn eigenlijk gewoon nieuwe namen voor MAX_VALUE en MIN_VALUE.


Antwoord 3, autoriteit 5%

Om Infinityte gebruiken, kun je Doublegebruiken dat Infinityondersteunt: –

   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);

UITVOER: –

Infinity
-Infinity
-Infinity
Infinity 
NaN

Antwoord 4, autoriteit 3%

De typen Doubleen Floathebben de constante POSITIVE_INFINITY.


Antwoord 5, autoriteit 2%

Ik weet niet zeker of Java oneindig is voor elk numeriek type, maar voor sommige numerieke gegevenstypen is het antwoord positief:

Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY

of

Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY

Misschien vindt u het volgende artikel ook nuttig, waarin enkele wiskundige bewerkingen met +/- oneindig worden weergegeven: Java drijvende komma ingewikkeldheden.


Antwoord 6, autoriteit 2%

Alleen dubbele en float type ondersteuning POSITIVE_INFINITYconstant.


7

voor de numerieke wikkeltypen.

E.G Double.positve_infinity

Ik hoop dat dit u kan helpen.


Antwoord 8

Aangezien het klasnummer niet definitief is, volgt hier een:
idee, dat vind ik nog niet terug in de andere berichten.
Namelijk om de klasse Number te subklassen.

Dit zou op de een of andere manier een object opleveren dat kan worden behandeld
als oneindig voor Integer, Long, Double, Float,
BigInteger en BigDecimal.

Omdat er slechts twee waarden zijn, kunnen we het singleton-patroon gebruiken:

public final class Infinity extends Number {
    public final static Infinity POSITIVE = new Infinity(false);
    public final static Infinity NEGATIVE = new Infinity(true);
    private boolean negative;
    private Infinity(boolean n) {
        negative = n;
    }
}

Op de een of andere manier denk ik dat de overige methoden intValue(), longValue()
etc.. moet dan worden overschreven om een uitzondering te maken. Zodat
de oneindigheidswaarde kan niet worden gebruikt zonder verdere voorzorgsmaatregelen.


Antwoord 9

Ik ben een beginner in Java…
Ik vond een andere implementatie voor de oneindigheid in de Java-documentatie, voor de typen booleanen Double.
https://docs. oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3

Positieve nul en negatieve nul zijn gelijk; dus het resultaat van de
uitdrukking 0.0==-0.0 is waar en het resultaat van 0.0>-0.0 is onwaar. Maar
andere bewerkingen kunnen positieve en negatieve nul onderscheiden; voor
1.0/0.0 heeft bijvoorbeeld de waarde positief oneindig, terwijl de waarde van
1.0/-0.0 is negatief oneindig.

Het ziet er lelijk uit, maar het werkt.

public class Main {
    public static void main(String[] args) {
        System.out.println(1.0/0.0);
        System.out.println(-1.0/0.0);
    }
}

Antwoord 10

Integer oneindig :

 Integer maxNumber = Integer.MAX_VALUE

Dubbele oneindigheid

 Double maxNumber = Double.MAX_VALUE;
  Double positiveInf = Double.POSITIVE_INFINITY;
  Double negativeInf = Double.NEGATIVE_INFINITY

Zweven oneindig

  Float positiveInf = Float.POSITIVE_INFINITY;
   Float negativeInf = Float.NEGATIVE_INFINITY
   Float maxNumber = Float.MAX_VALUE;

Other episodes