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%
Double
ondersteunt 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 - Infinity
is 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 Integer
te 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 myInf
vergelijkt 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 Infinity
te gebruiken, kun je Double
gebruiken dat Infinity
ondersteunt: –
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 Double
en Float
hebben 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_INFINITY
constant.
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 boolean
en 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;