Unterschied zwischen Float und Double - welchen sollte ich verwenden?

(Hinweis: Dieser Artikel setzt voraus, dass die Leser über die Grundlagen der Informatik Bescheid wissen.)

Viele Neuling-Programmierer / Studenten, die in Informatik eingeschrieben sind, stellen häufig gestellte Fragen, die für das jeweilige Fachgebiet der Informatik relevant sind, das sie studieren. Die meisten Anfängerkurse beginnen mit den Themen des Zahlensystems, das in modernen Computern verwendet wird, einschließlich der binär, Dezimal, oktal und hexadezimal System. Dies sind die Computernummernformate, die die internen Repräsentationen von numerischen Werten in Computern (oder Rechnern und anderen Arten von Digitalcomputern) darstellen. Diese Werte werden als "Gruppierung von Bits" gespeichert..

Wie wir wissen, repräsentieren Computer Daten in Sätzen von binären Ziffern (d. H. In der Kombination von 1s und 0s, sowie, 1111 repräsentiert fünfzehn im Dezimalsystem) ist es sinnvoll, die verschiedenen Zahlenformate zu beschreiben, die zur Darstellung eines dynamischen Wertebereichs verwendet werden, da sie die Grundblöcke der Berechnung / Zahlenverarbeitung in jeder Art von Operation bilden. Sobald das Nummernsystem im Klassenzimmer definiert ist (oft schlecht), sind die Schüler versucht, auf die verschiedenen Zahlenformate innerhalb desselben Typs zuzugreifen (d. H., Fließkomma-Arithmetik) die eine bestimmte Genauigkeit und einen bestimmten Nummernbereich haben. Daher sind sie gezwungen, die Nuancen zwischen bestimmten Typen zu lernen. Zwei der am häufigsten verwendeten Datentypen sind Schweben und Doppelt, und während sie auf die gleichen Bedürfnisse abzielen (d. h., Fließkomma-Arithmetik), gibt es einige Unterschiede in ihrer internen Darstellung und in ihrer Gesamtwirkung auf die Berechnung im Programm. Es ist bedauerlich, dass viele Programmierer die Nuancen zwischen Flat- und Double-Datentypen vermissen und sie an Orten missbrauchen, an denen sie überhaupt nicht verwendet werden sollten. Dies führt letztendlich zu Fehlkalkulationen in anderen Programmteilen.

In diesem Artikel werde ich Ihnen den Unterschied zwischen Float und Double anhand der Codebeispiele in der Programmiersprache C erklären. Lass uns anfangen!

Float vs Double ... Wie sieht es aus??

Float und Double sind die Datendarstellung, die für die Fließkomma-Arithmetikoperationen verwendet werden. Denken Sie an die Dezimalzahlen, die Sie in der Mathematikklasse berechnen, z. B., 20.123, 16.23, 10.2, usw. sind sie keine ganzen Zahlen (d. h., 2, 5, fünfzehn, usw.), so dass sie die Berücksichtigung von Brüchen im Binärcode erfordern. Als resultierende Dezimalzahlen (d. H., 20.123, 16.23, usw.) kann nicht einfach mit einem normalen Binärformat (d. h. Integer) dargestellt werden. Der Hauptunterschied zwischen Float und Double besteht darin, dass erstere Fließkommadaten mit einfacher Genauigkeit (32 Bit) und Fließkommadaten mit doppelter Genauigkeit (64 Bit) sind. Double wird als "double" bezeichnet, da es sich im Grunde um eine Version mit doppelter Genauigkeit von Float handelt. Wenn Sie eine große Menge berechnen (denken Sie an die Tausenden von Nullen in der Anzahl), sind die Ungenauigkeiten im Double geringer und Sie verlieren nicht viel Präzision.

Es ist besser, die Codebeispiele näher auszuführen. Das Folgende ist die Operation mit Float und Double durch die mathematischen Funktionen, die in der Sprache C bereitgestellt werden:

#umfassen

int main ()

float num1 = 1.f / 82;

float num2 = 0;

für (int i = 0; i < 738; ++i)

num2 + = num1;

printf ("%. 7g \ n", num2);

Doppelzahl = 1,0 / 82;

double num4 = 0;

für (int i = 0; i < 738; ++i)

num4 + = num3;

printf ("%. 15g \ n", num4);

getchar ();

Es druckt Folgendes:

9.000031

8.99999999999983

Hier können Sie sehen, dass der geringfügige Unterschied in der Genauigkeit von Float und Double eine völlig andere Antwort ergibt, obwohl Double genauer zu sein scheint als Float.

Folgendes ist das Beispiel der sqrt () - Funktion in C:

#umfassen

#umfassen

int main ()

float num1 = sqrt (2382719676512365.1230112312312312);

double num2 = sqrt (2382719676512365.1230112312312312);

printf ("% f \ n", num1);

printf ("% f \ n", num2);

getchar ();

Es gibt folgende Ausgabe:

48813108.000000

48813109.678778

Hier sehen Sie, dass die Antwort in Double eine bessere Genauigkeit hat.

Alles in allem ist es besser, Double für die Fließkomma-Arithmetik zu verwenden, da einige Standard-Mathematikfunktionen in C auf Double laufen, und moderne Computer sind für Double-Fließkommaberechnungen extrem schnell und effizient. Dies reduziert den Bedarf an Float, es sei denn, Sie müssen mit vielen Fließkommazahlen arbeiten (denken Sie an große Arrays mit Tausenden von Nullen in den Zahlen) oder Sie arbeiten mit einem System, das keine doppelten Werte unterstützt. Präzisions-Fließkomma: Da viele GPUs, Low-Power-Geräte und bestimmte Plattformen (ARM Cortex-M2, Cortex-M4 usw.) Double noch nicht unterstützen, sollten Sie Float verwenden. Darüber hinaus ist zu beachten, dass bestimmte GPUs / CPUs in der Float-Verarbeitung besser / effizienter sind, wie bei der Berechnung von Vektoren / Matrix. Daher müssen Sie möglicherweise im Hardwarespezifikationshandbuch / in der Dokumentation nachschauen, welche Sie verwenden möchten für eine bestimmte Maschine.

Es gibt selten einen Grund, Float anstelle von Double im Code für moderne Computer zu verwenden. Die zusätzliche Genauigkeit in Double verringert die Möglichkeit von Rundungsfehlern oder anderen Ungenauigkeiten, die zu Problemen in anderen Programmteilen führen können, verringert diese jedoch nicht. Viele mathematische Funktionen oder Operatoren konvertieren Double und geben Double zurück, sodass Sie die Zahlen nicht in Float zurückgeben müssen, da dies die Genauigkeit verliert. Für eine detaillierte Analyse der Gleitkomma-Arithmetik empfehle ich Ihnen, diesen großartigen Artikel zu lesen (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)..

Zusammenfassung

Also… kurz gesagt:

Orte, an denen Sie Float verwenden sollten:

  • Wenn Sie auf Hardware abzielen, bei der die einfache Genauigkeit schneller ist als die doppelte Genauigkeit.
  • In Ihrer Anwendung wird die Fließkomma-Arithmetik intensiv verwendet, z. B. Tausende von Zahlen mit Tausenden von Nullen.
  • Sie führen eine sehr niedrige Optimierung durch. Beispielsweise verwenden Sie spezielle CPU-Anweisungen (d. H. SSE, SSE2, AVX usw.), die gleichzeitig mit mehreren Zahlen / Arrays / Vektoren arbeiten.

Fazit

In diesem Artikel habe ich den Unterschied zwischen Float und Double hervorgehoben und welcher sollte an bestimmten Stellen verwendet werden. Zweifellos sollte Double an den meisten Stellen blind verwendet werden, insbesondere wenn Sie auf moderne Computer abzielen, da die Wahrscheinlichkeit einer niedrigen Effizienz aufgrund der Verwendung der Double-Gleitkomma-Arithmetik höchst unwahrscheinlich ist. Wenn Sie Fragen haben, können Sie im Kommentarabschnitt nachfragen!