Definieren und verwenden Sie negative Unendlichkeit in C++
-
Verwenden Sie das negative Produkt von
numeric_limits::infinity()
in C++ -
Verwenden Sie die
INFINITY
-Definition aus dercmath
-Bibliothek
Dieser Artikel behandelt das Problem der Darstellung negativer Unendlichkeit in C++ und listet einige mögliche Lösungen auf.
C++ verwendet den IEEE-754-Standard, um die Gleitkommazahlen darzustellen. Es gibt drei Gleitkommadatentypen: float
, double
und long double
.
Alle diese Variablentypen erlauben die Speicherung von Zahlenwerten, die nicht im Datentyp int
gespeichert werden können.
Infinity wird in C++ als inf
geschrieben und resultiert in der Division eines positiven numerischen Werts durch einen Nullwert oder in der Berechnung eines numerischen Werts, der größer ist als das, was in 64 Bit gespeichert werden kann.
Der vorzeichenlose oder positiv fließende Unendlichkeitswert ist in verschiedenen C++-Bibliotheken wie cmath
und limits
definiert, aber es gibt keinen Standard für negative Unendlichkeit in C++.
Da es in C++ keine Standardmethode zur Darstellung von negativer Unendlichkeit gibt, finden Sie hier einige zuverlässige Methoden zur Darstellung und Verwendung von negativer Unendlichkeit in C++.
Verwenden Sie das negative Produkt von numeric_limits::infinity()
in C++
Verwenden Sie die Bibliothek limits
in C++.
#include <iostream>
#include <limits>
using namespace std;
int main() {
float f = numeric_limits<float>::infinity();
float negInf = f * -1;
cout << "The value of f is = " << f << endl;
cout << "The value of negInf is = " << negInf << endl;
cout << "The value of f + negInf is = " << f + negInf << endl;
return 0;
}
Im obigen Codeausschnitt gibt die Methode infinity
aus der Bibliothek limits
den Wert positiv unendlich zurück.
Die Syntax ist wie folgt.
numeric_limits<T>::infinity()
In der obigen Definition steht das T
zwischen den spitzen Klammern für Template-Klasse und wird in der konkreten Implementierung durch den Datentyp ersetzt, mit dem Sie die numeric_limits
-Methoden verwenden wollen. Im obigen Code-Snippet wird der Datentyp float
verwendet, aber double
kann auch ähnlich verwendet werden.
Die Methode infinity()
ist jedoch nur für nicht ganzzahlige Datentypen gültig, da ganzzahlige Datentypen wie int
und bool
von Natur aus endlich sind.
Die Ausgabe für den obigen Code lautet wie folgt.
The value of f is = inf
The value of negInf is = -inf
The value of f + negInf is = nan
Wie im obigen Beispiel zu sehen ist, wird bei Verwendung der Methode infinity()
der Variable f
vom Typ float
der Wert positiv unendlich zugewiesen. Dann wird ein sehr einfacher und intuitiver Ansatz verwendet, nämlich f
mit -1 zu multiplizieren, und das Ergebnis wird in der Variablen namens negInf
gespeichert, was dazu führt, dass der Wert von minus unendlich in negInf
gespeichert wird.
Wie in der obigen Ausgabe zu sehen ist, weist diese gültige Methode einer Variablen einen negativen Unendlichkeitswert zu. Um diese Methode weiter zu testen, werden f
und negInf
addiert, wodurch nan
zurückgegeben wird, was für Not-a-Number
steht und einen unkalkulierbaren Wert anzeigt.
Dieses Ergebnis stimmt mit den IEEE-754-Regeln für unendliche Werte überein und ist daher rechnerisch sicher.
Verwenden Sie die INFINITY
-Definition aus der cmath
-Bibliothek
Die cmath
-Bibliothek ist eine weitere C++-Bibliothek mit vielen nützlichen Methoden und Funktionen, um mit gängigen mathematischen Operationen und Transformationen umzugehen.
Die Bibliothek enthält auch ihre Definition des unendlichen Werts, der INFINITY
genannt wird und ähnlich wie numeric_limits<T>::infinity()
verwendet werden kann und sowohl float
als auch double
Datentypen.
Unter Verwendung der gleichen Methode wie im vorherigen Beispiel führt die Multiplikation des Werts von unsigned oder positive unendlich mit einem negativen Wert zum negativen unendlichen Wert.
#include <cmath>
#include <iostream>
using namespace std;
int main() {
long double f = INFINITY;
long double negInf = f * -1;
cout << "The value of f is = " << f << endl;
cout << "The value of negInf is = " << negInf << endl;
cout << "The value of f + negInf is = " << f + negInf << endl;
return 0;
}
Die Ausgabe für den obigen Code lautet wie folgt.
The value of f is = inf
The value of negInf is = -inf
The value of f + negInf is = nan
Wie zu sehen ist, erzeugen beide Methoden die gleiche Ausgabe, und beide können sicher verwendet werden, um negative Unendlichkeit in C++ zu implementieren.