Unterschied zwischen Float und Double - Welchen sollte ich verwenden? Unterschied zwischen

Anonim

(Hinweis: Dieser Artikel geht davon aus, dass die Leser über die Grundlagen der Informatik Bescheid wissen)

Viele Neueinsteiger / Studenten, die in Informatik eingeschrieben sind, stellen die häufig gestellten Fragen, die für das jeweilige Fachgebiet der Informatik relevant sind. Die meisten Anfängerkurse beginnen mit den Themen des Zahlensystems, das in den modernen Computern verwendet wird, einschließlich der binär , dezimal , oktal und hexadezimal < System. Dies sind die Computer-Nummer-Formate, die die internen Darstellungen von numerischen Werten in Computern (oder Taschenrechnern und anderen Arten von digitalen Computern) sind. Diese Werte werden als "Gruppierung von Bits" gespeichert.

Wie wir wissen, stellen Computer Daten in Mengen von Binärziffern dar (dh in der Kombination von

1s und 0s , z. B. 1111) repräsentiert 15 im Dezimalsystem), es ist sinnvoll, über die verschiedenen Zahlenformate zu unterrichten, die zur Darstellung eines dynamischen Wertebereichs dienen, da sie die Grundblöcke der Berechnung / Zahlenverarbeitung bilden in irgendeiner Art von Operation. Sobald das Zahlensystem im Klassenraum definiert ist (oft schlecht), sind Studenten versucht, auf die verschiedenen Zahlenformate innerhalb des gleichen Typs (d.h. Fließkomma-Arithmetik ) zu wechseln, die eine bestimmte Genauigkeit und einen bestimmten Zahlenbereich haben. So sind sie gezwungen, die Nuancen zwischen bestimmten Typen zu lernen. Zwei der am häufigsten verwendeten Datentypen sind Float und Double , und während sie die gleichen Bedürfnisse haben (dh Fließkomma-Arithmetik ), gibt es durchaus einige Unterschiede in ihrer internen Darstellung und 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 gar nicht erst verwendet werden sollten. Letztendlich führt dies zu Fehlkalkulationen in anderen Teilen des Programms.

In diesem Artikel werde ich Ihnen den Unterschied zwischen Float und Double mit den Codebeispielen in der Programmiersprache C erläutern. Lass uns anfangen!

Float vs Double … Was ist das Geschäft?

Float und Double sind die Datendarstellungen, die für arithmetische Gleitkommaoperationen verwendet werden, denken Sie an die Dezimalzahlen, die Sie in der Mathematikklasse berechnen, z. B.

20. 123 , 16. 23 , 10. 2 , usw., sie sind keine ganzen Zahlen (dh 2 , 5 , 15 usw.), sie erfordern also die Berücksichtigung von Brüche in der Binärdatei. Als resultierende Dezimalzahlen (z. B. 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 ersteres die Fließkomma-Daten mit einfacher Genauigkeit (32 Bit) ist, während Letzteres Fließkomma-Datentyp mit doppelter Genauigkeit (64 Bit) ist. Double wird als "Double" bezeichnet, da es sich im Grunde um eine Double-Precision-Version von Float handelt. Wenn Sie eine große Menge berechnen (denken Sie an die Tausende von Nullen in der Zahl), dann sind die Ungenauigkeiten im Doppel kleiner und Sie werden nicht viel Präzision verlieren.

Es ist besser, anhand der Codebeispiele zu arbeiten. Das Folgende ist die Operation auf Float und Double durch die mathematischen Funktionen, die in C-Sprache zur Verfügung gestellt werden:

#include

int main () {

float num1 = 1. f / 82;

float num2 = 0;

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

num2 + = num1;

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

double num3 = 1. 0/82;

doppelte Zahl4 = 0;

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

num4 + = num3;

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

getchar ();

}

Es wird Folgendes gedruckt:

9. 000031

8. 99999999999983

Hier sehen Sie, dass der geringe Unterschied in der Genauigkeit von Float und Double insgesamt eine andere Antwort ergibt, obwohl Double genauer zu sein scheint als Float.

Im folgenden Beispiel der Funktion sqrt () in C:

#include

#include

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 Fließkomma-Arithmetik zu verwenden, da mehrere Standardfunktionen in C auf Double arbeiten und moderne Computer extrem schnell und effizient für Double-Floating-Point-Berechnungen sind. Dies führt dazu, dass die Verwendung von Float reduziert werden muss, es sei denn, Sie müssen viele Fließkommazahlen verarbeiten (denken Sie an große Arrays mit Tausenden von Nullen in den Zahlen) oder Sie arbeiten auf einem System, das keine doppelten Gleitkommazahlen unterstützt. Präzisions-Gleitkommazahl, da viele GPUs, Low-Power-Geräte und bestimmte Plattformen (ARM Cortex-M2, Cortex-M4 usw.) Double noch nicht unterstützen, sollten Sie dann Float verwenden. Darüber hinaus ist zu beachten, dass bestimmte GPUs / CPUs in der Float-Verarbeitung besser / effizienter arbeiten, wie bei der Berechnung von Vektoren / Matrizen. Daher müssen Sie möglicherweise in der Hardware-Spezifikation / Dokumentation nachlesen, welche Sie verwenden sollten für eine bestimmte Maschine.

Es gibt kaum einen Grund, Float anstelle von Double im Code zu verwenden, der auf moderne Computer abzielt. Die zusätzliche Genauigkeit in Double reduziert, aber nicht eliminiert, die Möglichkeit von Rundungsfehlern oder anderen Ungenauigkeiten, die Probleme in anderen Teilen des Programms verursachen können. Viele mathematische Funktionen oder Operatoren konvertieren und geben Double zurück, sodass Sie die Zahlen nicht wieder in Float umwandeln müssen, da sonst die Genauigkeit verloren geht.Für eine detaillierte Analyse der Fließkomma-Arithmetik empfehle ich Ihnen diesen Artikel (// docs. Oracle. Com / cd / E19957-01 / 806-3568 / ncg_goldberg. Html) zu lesen.

Zusammenfassung

So … kurz und knapp:

Orte, an denen Sie Float verwenden sollten:

Wenn Sie auf Hardware zielen, bei der die einfache Genauigkeit schneller als die doppelte Genauigkeit ist.

  • Ihre Anwendung verwendet Fließkomma-Arithmetik wie Tausende von Zahlen mit Tausenden von Nullen.
  • Sie tun sehr Low-Level-Optimierung. Beispielsweise verwenden Sie spezielle CPU-Anweisungen (z. B. 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. Wahrscheinlich ist es besser, Double an den meisten Stellen blind zu verwenden, besonders wenn Sie auf moderne Computer abzielen, da die Wahrscheinlichkeit geringer Effizienz aufgrund der Verwendung der doppelten Gleitkommaarithmetik sehr unwahrscheinlich ist. Wenn Sie irgendwelche Fragen haben, können Sie im Kommentarbereich fragen!