Sie können auch floats verwenden, die einen Wert haben, der unendlich darstellt.
Xeo
1
@jozefg - Okay, es ist also keine Überprüfung, nach der der Benutzer sucht, sondern nur die Max ValueImplementierung der Sprache.
TastaturP
4
@jozefg Ha, ich dachte du würdest A * implementieren. Ich war so nah!
Etienne de Martel
2
@jozefg - Das macht Sinn. Ich dachte, OP wollte die a>bPrüfung tatsächlich durchführen :)
TastaturP
1
@ Hikari: Nein, ich sage, dass es keine Möglichkeit gibt, Unendlichkeit in einem ganzzahligen Typ darzustellen. Sie können eine Klasse mit überladenen Operatoren erstellen.
Keith Thompson
Antworten:
130
Ganzzahlen sind von Natur aus endlich. Der nächstgelegene Wert ist die Einstellung aauf intden Maximalwert:
#include<limits>// ...int a = std::numeric_limits<int>::max();
Welches wäre 2^31 - 1(oder 2 147 483 647), wenn intIhre Implementierung 32 Bit breit ist.
Wenn Sie wirklich unendlich brauchen, verwenden Sie einen Gleitkommazahlentyp wie floatoder double. Sie können dann unendlich werden mit:
double a = std::numeric_limits<double>::infinity();
Und wenn Sie als int wirklich unendlich brauchen , schreiben Sie eine Wrapper-Klasse, die die Vergleichsoperatoren überlastet und eine boolesche Variable namens "is_infinity" hat.
@WTP Angesichts der Tatsache, dass er dies für die Implementierung eines Dijkstra-Algorithmus benötigt, bezweifle ich, dass dies notwendig wäre. Aber sonst ist es die vernünftigste Wahl.
Etienne de Martel
4
Ich habe den Kommentar für zukünftige Besucher hinzugefügt, die den Dijkstra-Algorithmus nicht implementieren, ihn aber für etwas anderes benötigen. :)
Sieht so aus, als hätten wir hier einen Kandidaten für ein goldenes Abzeichen. :) +1 für euch beide!
Mysticial
2
Beachten Sie, dass Sie bei der Verwendung der intLösung mit der Arithmetik sehr vorsichtig sein müssen: Das Hinzufügen einer positiven Zahl zu "unendlich" führt zu einem sehr unerwarteten Ergebnis.
Lambda Fairy
67
Ganzzahlen sind endlich, so dass Sie sie leider nicht auf eine wahre Unendlichkeit setzen können. Sie können es jedoch auf den Maximalwert eines int setzen. Dies würde bedeuten, dass es größer oder gleich einem anderen int ist, dh:
a>=b
ist immer wahr.
Sie würden dies tun, indem Sie
#include<limits>//your code hereint a = std::numeric_limits<int>::max();//go off and lead a happy and productive life
Dies entspricht normalerweise 2.147.483.647
Wenn Sie wirklich einen echten "unendlichen" Wert benötigen, müssten Sie ein Double oder ein Float verwenden. Dann können Sie dies einfach tun
float a = std::numeric_limits<float>::infinity();
Weitere Erläuterungen zu numerischen Grenzwerten finden Sie hier
Viel Spaß beim Codieren!
Hinweis: Wie bereits erwähnt, müssen Sie, wenn WTP unbedingt ein "unendlich" int haben muss, eine Wrapper-Klasse für ein int schreiben und die Vergleichsoperatoren überladen, obwohl dies für die meisten Projekte wahrscheinlich nicht erforderlich ist.
... und wenn Sie max()oder infinity()in einer Vorlage verwenden möchten, in der der numerische Typ unbekannt ist, müssen Sie +/-infinity()iff std::numeric_limits<T>::has_infinityund andere verwenden min()undmax()
Ben Jackson
13
intist von Natur aus endlich; Es gibt keinen Wert, der Ihren Anforderungen entspricht.
Wenn Sie jedoch bereit sind, den Typ zu ändern b, können Sie dies mit Operatorüberschreibungen tun:
float
s verwenden, die einen Wert haben, der unendlich darstellt.Max Value
Implementierung der Sprache.a>b
Prüfung tatsächlich durchführen :)Antworten:
Ganzzahlen sind von Natur aus endlich. Der nächstgelegene Wert ist die Einstellung
a
aufint
den Maximalwert:Welches wäre
2^31 - 1
(oder2 147 483 647
), wennint
Ihre Implementierung 32 Bit breit ist.Wenn Sie wirklich unendlich brauchen, verwenden Sie einen Gleitkommazahlentyp wie
float
oderdouble
. Sie können dann unendlich werden mit:quelle
int
Lösung mit der Arithmetik sehr vorsichtig sein müssen: Das Hinzufügen einer positiven Zahl zu "unendlich" führt zu einem sehr unerwarteten Ergebnis.Ganzzahlen sind endlich, so dass Sie sie leider nicht auf eine wahre Unendlichkeit setzen können. Sie können es jedoch auf den Maximalwert eines int setzen. Dies würde bedeuten, dass es größer oder gleich einem anderen int ist, dh:
ist immer wahr.
Sie würden dies tun, indem Sie
Dies entspricht normalerweise 2.147.483.647
Wenn Sie wirklich einen echten "unendlichen" Wert benötigen, müssten Sie ein Double oder ein Float verwenden. Dann können Sie dies einfach tun
Weitere Erläuterungen zu numerischen Grenzwerten finden Sie hier
Viel Spaß beim Codieren!
Hinweis: Wie bereits erwähnt, müssen Sie, wenn WTP unbedingt ein "unendlich" int haben muss, eine Wrapper-Klasse für ein int schreiben und die Vergleichsoperatoren überladen, obwohl dies für die meisten Projekte wahrscheinlich nicht erforderlich ist.
quelle
max()
oderinfinity()
in einer Vorlage verwenden möchten, in der der numerische Typ unbekannt ist, müssen Sie+/-infinity()
iffstd::numeric_limits<T>::has_infinity
und andere verwendenmin()
undmax()
int
ist von Natur aus endlich; Es gibt keinen Wert, der Ihren Anforderungen entspricht.Wenn Sie jedoch bereit sind, den Typ zu ändern
b
, können Sie dies mit Operatorüberschreibungen tun:quelle
std::numeric_limits<float>::infinity()
.Dies ist eine Nachricht für mich in der Zukunft:
Benutz einfach:
(unsigned)!((int)0)
Es erzeugt die größtmögliche Zahl in jeder Maschine, indem alle Bits 1s (Einsen) zugewiesen und dann in vorzeichenlose umgewandelt werden
Noch besser
Und dann verwenden Sie einfach INF in Ihrem Code
quelle
#define INF ((unsigned) ~0)
, siehe hier .Sie können auch INT_MAX verwenden:
http://www.cplusplus.com/reference/climits/
Dies entspricht der Verwendung von numeric_limits.
quelle
int min und max Werte
Int -2,147,483,648 / 2,147,483,647 Int 64 -9,223,372,036,854,775,808 / 9,223,372,036,854,775,807
Ich denke, Sie könnten a auf 9.223.372.036.854.775.807 setzen, aber es müsste ein int64 sein
Wenn Sie immer wollen, dass a reifer ist als b, warum müssen Sie es überprüfen? setze es einfach so, dass es immer wahr ist
quelle
cstdint
).int
und verwandte Typen in C ++.