In diesem Tutorial lernen wir anhand von Beispielen die Datentypen float und double kennen. Wir werden auch einige der wichtigsten Unterschiede zwischen ihnen und den Zeitpunkt ihrer Verwendung untersuchen.
In C ++ werden sowohl float
als auch double
Datentypen für Gleitkommawerte verwendet. Gleitkommazahlen werden für Dezimal- und Exponentialwerte verwendet. Beispielsweise,
// creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5
Wir müssen das Suffix f
oder F
am Ende eines float
Wertes hinzufügen . Dies liegt daran, dass der Compiler Dezimalwerte ohne das Suffix als interpretiert double
.
Betrachten Sie diesen Code.
float a = 5.6;
Hier haben wir double
einer float
Variablen einen Wert zugewiesen .
In diesem Fall wird 5.6float
vom Compiler automatisch konvertiert, bevor es der Variablen a zugewiesen wird. Dies kann zu Datenverlust führen. Weitere Informationen finden Sie unter C ++ - Typkonvertierung.
Unterschied zwischen Float und Double
schweben | doppelt |
---|---|
Größe: 4 Bytes | Größe: 8 Bytes |
Präzision: Im Allgemeinen 7 Dezimalstellen | Präzision: Im Allgemeinen 15 Dezimalstellen |
Beispiel: 3.56f , 3e5f usw. | Beispiel: 3.56 , 3e5 usw. |
Hinweis: Wenn Sie keine bestimmte Anforderung haben, verwenden Sie immer double
anstelle von float
, da float
Variablen bei der Arbeit mit großen Zahlen zu Fehlern führen können.
Beispiel 1: C ++ float und double
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Ausgabe
Doppelte Typnummer = 3.91235 Floattypnummer = 3.91235
Hinweis: Der für dieses Beispiel verwendete Compiler (MinGW-Compiler) hat 6 Stellen zugelassen. Daher wurden unsere Variablenwerte vom Compiler abgerundet und auf 6 Stellen gekürzt.
setprecision () zum Angeben von Dezimalstellen
cout
Mit der setprecision()
Funktion können wir die Anzahl der zu druckenden Dezimalstellen angeben .
Diese Funktion ist in der iomanip
Header-Datei definiert, die für Eingabe- / Ausgabemanipulation steht .
Beispiel 2: Verwenden von setprecision () für Gleitkommazahlen
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )
Ausgabe
Doppelte Typnummer = 3.912348239293 Float-Typnummer = 3.912348270416
Wie wir aus dem obigen Beispiel sehen können, haben wir die Genauigkeit auf bis zu 13 Stellen festgelegt.
cout << setprecision(13);
Der Gleitkommawert, den wir unseren Variablen zugewiesen haben, besteht ebenfalls aus 13 Ziffern.
Da jedoch float
eine Genauigkeit von bis zu nur 7 Stellen hat, zeigt es , garbage Werte nach ihrer Präzision überschritten wird.
Unsere double
Variable zeigt die richtige Zahl an, da sie eine Genauigkeit von 15 Stellen hat, während die Zahl selbst aus 13 Stellen besteht.
Alternativ können wir beim Drucken unterschiedliche Genauigkeiten für verschiedene Variablen angeben.
Beispiel 3: Unterschiedliche Präzisionen für unterschiedliche Variablen
#include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )
Ausgabe
Doppelte Typnummer = 3.9123482393 Float-Typnummer = 3.912348
Aus dem obigen Programm können wir ersehen, dass wir zwei verschiedene Genauigkeitswerte für float
und festgelegt haben double
.
In beiden Fällen ist die Genauigkeit kleiner als die tatsächlichen Ziffern der Zahl. Die letzte Ziffer wird also abgerundet und der Rest wird abgeschnitten.
Hinweis: Wenn wir eine Genauigkeit angeben, die größer ist als die Genauigkeit des Datentyps selbst (7 für float
und 15 für double
), gibt der Compiler nach Überschreiten der Genauigkeitsgrenze Müllwerte aus, wie anhand der float
Ausgabe in Beispiel 2 ersichtlich ist .
Arbeiten Sie mit Exponentialzahlen
Wie oben erwähnt float
und double
kann auch zur Darstellung von Exponentialzahlen verwendet werden . Beispielsweise,
// ex = 325 X (10 25) double ex = 325E25;
C ++ gibt Exponentialzahlen und sehr große Zahlen in einem Format aus, das als wissenschaftliches Format bezeichnet wird. Die Variable ex wird standardmäßig in diesem Format ausgegeben, da es sich um eine sehr große Zahl handelt.
Um C ++ zu zwingen, unsere Gleitkommazahlen scientific
unabhängig von der Größe der Zahl im Format anzuzeigen , verwenden wir den Formatbezeichner scientific
in cout
.
double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;
Darüber hinaus gibt es einen weiteren Formatbezeichner fixed
, der Gleitkommazahlen im Dezimalformat anzeigt.
Es ähnelt der Anzeige von Gleitkommazahlen, indem nur cout
ohne verwendet wird setprecision()
, mit der Ausnahme, dass fixed
Zahlen mit bis zu 6 Dezimalstellen angezeigt werden.
Auf der anderen Seite werden nur cout
Anzeigestellen gemäß dem jeweiligen Compiler verwendet (6 Gesamtziffern beim MinGW-Compiler , einschließlich der Ziffern vor dem Dezimalpunkt).
Beispiel 4: Feste und wissenschaftliche Formate
#include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )
Ausgabe
Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004
long double
Apart from float
and double
, there is another data type that can store floating-point numbers. This is known as long double
.
It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double
, though most of the time, it is greater than that of double
.
long double
values should end with L
. For example,
// declaring a long double variable long double num_ldb = 2.569L;
Anmerkung: Die Daten Gleitkommatypen unterstützt von C ++ sind float
, double
und long double
. Es gibt keine long float
.