Unterschied zwischen Float und Double - welches sollte ich verwenden?

Unterschied zwischen Float und Double - welches sollte ich verwenden?

(Hinweis: In diesem Artikel geht davon aus, dass die Leser die Grundlagen der Informatik kennen.)

Viele Newbie -Programmierer / Studenten, die in Informatik eingeschrieben sind. 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 Darstellungen numerischer Werte in Computern (oder Taschenrechnern und anderen digitalen Computern) sind. Diese Werte werden als "Gruppierung von Bits" gespeichert.

Wie wir wissen, repräsentieren Computer Daten in Sätzen von binären Ziffern (i.e., in der Kombination von 1s Und 0s, wie zum Beispiel, 1111 repräsentiert 15 Im Dezimalsystem) ist es sinnvoll, über die verschiedenen Zahlenformate zu lehren, die verwendet werden, um einen dynamischen Wertebereich darzustellen, da sie die Grundblöcke der Berechnung/Zahl in jeder Art von Operation ausmachen. Sobald das Zahlensystem im Klassenzimmer definiert ist (oft schlecht), sind die Schüler versucht, auf die verschiedenen Zahlenformate innerhalb desselben Typs zu wechseln (i.e., schwimmende Punktarithmetik) die eine gewisse Präzision und Zahlenbereich 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 die gleichen Bedürfnisse ansprechen (ich.e., schwimmende Punktarithmetik) Es gibt einen gewissen Unterschied in ihrer internen Darstellung und des Gesamteffekts auf die Berechnung im Programm. Es ist bedauerlich, dass viele Programmierer die Nuancen zwischen flachen und doppelten Datentypen vermissen und sie an Orten missbrauchen, an denen sie überhaupt nicht verwendet werden sollten. Letztendlich führt in anderen Teilen des Programms Fehlkalkulationen.

In diesem Artikel werde ich Ihnen den Unterschied zwischen Float und Double mit den Code -Beispielen in der C -Programmiersprache mitteilen. Lass uns anfangen!

Float gegen Double ... was ist der Deal??

Float und Double sind die Datenrepräsentation, die für die arithmetischen Operationen schwebender Punkt verwendet werden. Denken Sie an die Dezimalzahlen, die Sie in der Mathematikklasse berechnen, wie z, 20.123, 16.23, 10.2, usw., Sie sind keine ganzen Zahlen (ich.e., 2, 5, 15, usw.), so erfordern sie die Berücksichtigung von Brüchen im Binär. Als resultierende Dezimalzahlen (ich.e., 20.123, 16.23, usw.) kann nicht leicht mit einem normalen binären Format dargestellt werden (i.e., Ganze Zahl). Der Hauptunterschied zwischen Float und Double besteht darin, dass erstere die einzelnen Präzisionsdaten (32-Bit) sind, während letztere doppelte Präzision (64-Bit-) Schwimmpunkt-Datentyp ist. Das Doppel wird als "doppelt" bezeichnet, weil es im Grunde eine doppelte Präzisionsversion von Float ist. Wenn Sie eine große Menge berechnen (denken Sie an die Tausenden von 0 in der Zahl), dann sind die Ungenauigkeiten im Doppel kleiner und Sie werden nicht viel Präzision verlieren.

Es ist besser, mit den Code -Beispielen auszuarbeiten. Im Folgenden finden Sie die Operation auf Float und doppelt durch die in der C -Sprache bereitgestellten Mathematikfunktionen:

#enthalten

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;

double num4 = 0;

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

Num4 += Num3;

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

getChar ();

Es druckt Folgendes aus:

9.000031

8.99999999999983

Hier können Sie erkennen, dass der geringfügige Unterschied in der Präzision von Float und Doppel eine andere Antwort gibt, wenn auch doppelt so viel genauer als Float.

Das folgende Beispiel ist das Beispiel der Funktion SQRT () in C:

#enthalten

#enthalten

int main ()

float num1 = SQRT (2382719676512365.1230112312312312);

Doppel Num2 = SQRT (2382719676512365.1230112312312312);

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

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

getChar ();

Es gibt die folgende Ausgabe:

48813108.000000

48813109.678778

Hier können Sie sehen, dass die Antwort im Doppel eine bessere Präzision hat.

Alles in allem ist es besser, Double für die Gleitkomma-Arithmetik zu verwenden, da mehrere Standard-Mathematikfunktionen in C auf Doppel- und modernen Computern extrem schnell und effizient für doppelte Gleitkomma-Berechnungen sind. Dies führt zu einer Reduzierung der Notwendigkeit, Float zu verwenden, es sei denn Precision Floating Point, wie viele GPUs, Geräte mit geringem Stromverbrauch und bestimmte Plattformen (ARM Cortex-M2, Cortex-M4 usw. usw.) Noch nicht doppelt unterstützen, dann sollten Sie Float verwenden. Darüber hinaus ist eine Sache zu bedenken, dass bestimmte GPUs / CPUs bei der Berechnung von Vektoren / Matrix besser / effizient in der Float -Verarbeitung funktionieren. In der Hardware -Spezifikationshandbuch / der Dokumentation müssen Sie möglicherweise nachsehen, um besser zu entscheiden, welche Sie verwenden sollten für eine bestimmte Maschine.

Es gibt selten einen Grund, Float anstelle von Doppel in dem Code zu verwenden, das auf moderne Computer abzielt. Die zusätzliche Präzision im doppelten Vertrag. Viele Mathematikfunktionen oder Operatoren konvertieren und geben doppelt zurück. Für eine detaillierte Analyse zur Floating-Punkt-Arithmetik empfehle ich Ihnen dringend, diesen fantastischen Artikel zu lesen (http: // docs.Orakel.com/cd/e19957-01/806-3568/ncg_goldberg.HTML).

Zusammenfassung

Also ... auf den Punkt gebracht:

Orte, an denen Sie Float verwenden sollten:

  • Wenn Sie auf Hardware abzielen, bei denen die einzelne Präzision schneller ist als die doppelte Präzision.
  • Ihre Anwendung nutzt die Gleitkomma-Arithmetik stark wie Tausende von Zahlen mit Tausenden von 0er.
  • Sie führen eine sehr niedrige Optimierung durch. Zum Beispiel verwenden Sie spezielle CPU -Anweisungen (i.e., SSE, SSE2, AVX usw.), die gleichzeitig mit mehreren Zahlen / Arrays / Vektoren arbeiten.

Abschluss

In diesem Artikel habe ich den Unterschied zwischen Float und Doppel hervorgehoben und an bestimmten Stellen verwendet werden. Es ist wohl besser, an den meisten Orten blind zu doppelt zu verwenden, insbesondere wenn Sie auf moderne Computer abzielen, da die Chancen auf geringer Effizienz aufgrund der Verwendung von doppelter schwimmender Punktarithmetik sehr unwahrscheinlich sind. Wenn Sie Fragen haben, können Sie im Kommentarbereich unten stellen!