In meiner Programmiererfahrung muss ich häufig eine Entscheidung treffen, ob ich float oder double für meine reellen Zahlen verwenden soll. Manchmal gehe ich schweben, manchmal gehe ich doppelt, aber das fühlt sich wirklich subjektiver an. Wenn ich mit der Verteidigung meiner Entscheidung konfrontiert wäre, würde ich wahrscheinlich keine stichhaltigen Gründe nennen.
Wann benutzt du float und wann double? Verwenden Sie immer double, nur wenn Speicherbeschränkungen vorliegen, setzen Sie auf float? Oder verwenden Sie immer float, es sei denn, die Genauigkeitsanforderung erfordert, dass Sie double verwenden? Gibt es einige wesentliche Unterschiede hinsichtlich der rechnerischen Komplexität der Grundrechenarten zwischen float und double? Was sind die Vor- und Nachteile von Float oder Double? Und hast du schon lange Double benutzt?
quelle
Antworten:
Die Standardeinstellung für einen Gleitkommatyp sollte sein
double
. Dies ist auch die Art , die Sie mit Gleitpunktliterale ohne Suffix erhalten oder (in C) Standardfunktionen , die auf Gleitkommazahlen arbeiten (zBexp
,sin
usw.).float
sollte nur verwendet werden, wenn Sie mit vielen Gleitkommazahlen arbeiten müssen (denken Sie in der Größenordnung von Tausenden oder mehr), und die Analyse des Algorithmus hat gezeigt, dass der verringerte Bereich und die verringerte Genauigkeit kein Problem darstellen.long double
kann verwendet werden, wenn Sie mehr Reichweite oder Genauigkeit benötigen alsdouble
, und wenn dies auf Ihrer Zielplattform möglich ist.Zusammenfassend ist festzuhalten, dass es für den Gebrauch durch die Fachleute reserviert sein sollte ,
float
undlong double
zwardouble
für den "täglichen" Gebrauch.quelle
float
(und gelegentlich mit halber Genauigkeit), da weder das menschliche Auge noch die Anzeige oder das Farbsystem so viele Präzisionsteile aufweisen . Dieser Hinweis gilt beispielsweise für OpenGL usw. Dieser zusätzliche Hinweis gilt nicht für medizinische Bilder, für die strengere Genauigkeitsanforderungen gelten.Es gibt selten Gründe, float anstelle von double für Code zu verwenden, der auf moderne Computer abzielt. Durch die zusätzliche Präzision wird die Wahrscheinlichkeit von Rundungsfehlern oder anderen Ungenauigkeiten, die Probleme verursachen, verringert (aber nicht beseitigt).
Die Hauptgründe für die Verwendung von float sind:
Im Grunde genommen ist also Double der richtige Weg, es sei denn, Sie haben Hardware-Einschränkungen oder die Analyse hat ergeben, dass das Speichern von Zahlen mit doppelter Genauigkeit erheblich zur Speichernutzung beiträgt.
quelle
Verwenden Sie
double
für alle Ihre Berechnungen und temporären Variablen. Verwendenfloat
Sie diese Option, wenn Sie eine Reihe von Zahlen verwalten müssenfloat[]
(sofern die Genauigkeit ausreicht) und Sie mit über Zehntausenden vonfloat
Zahlen arbeiten.Viele / die meisten mathematischen Funktionen oder Operatoren konvertieren / geben zurück
double
, und Sie möchten die Zahlen nichtfloat
für Zwischenschritte zurücksetzen.Wenn Sie beispielsweise eine Eingabe von 100.000 Zahlen aus einer Datei oder einem Stream haben und diese sortieren müssen, geben Sie die Zahlen in a ein
float[]
.quelle
Einige Plattformen (ARM Cortex-M2, Cortex-M4 usw.) unterstützen Double nicht (Dies kann immer im Referenzhandbuch zu Ihrem Prozessor nachgelesen werden. Wenn keine Warnungen oder Fehler beim Kompilieren angezeigt werden, bedeutet dies nicht, dass der Code optimal ist. double kann emuliert werden.). Aus diesem Grund müssen Sie sich möglicherweise an int oder float halten .
Wenn das nicht der Fall ist, würde ich double verwenden .
Sie können den berühmten Artikel von D. Goldberg lesen ("Was jeder Informatiker über Gleitkomma-Arithmetik wissen sollte"). Sie sollten zweimal überlegen, bevor Sie Gleitkomma-Arithmetik verwenden. Es ist sehr wahrscheinlich, dass sie in Ihrer speziellen Situation überhaupt nicht benötigt werden.
http://perso.ens-lyon.fr/jean-michel.muller/goldberg.pdf
quelle
Bei Problemen in der Praxis ist die Stichprobenschwelle Ihrer Daten wichtig, wenn Sie diese Frage beantworten. In ähnlicher Weise ist auch das Grundrauschen wichtig. Wenn einer der beiden Werte von Ihrer Datentypauswahl überschritten wird, kann die Genauigkeit nicht verbessert werden.
Die meisten Real-World-Sampler sind auf 24-Bit-DACs beschränkt. Es wird vorgeschlagen, dass 32 Bit Genauigkeit bei Berechnungen in der realen Welt ausreichend sind, wenn der Signifikand 24 Bit Genauigkeit ist.
Doppelte Präzision kostet 2x Speicher. Daher kann die Beschränkung der Verwendung von Double-over-Floats den Speicherbedarf / die Bandbreite laufender Anwendungen drastisch verringern.
quelle
Die Wahl der zu verwendenden Variablen zwischen float und double hängt von der Genauigkeit der erforderlichen Daten ab. Wenn eine Antwort nur unwesentliche Abweichungen von der tatsächlichen Antwort haben muss, sind viele Dezimalstellen erforderlich, was die Verwendung des Doppelten vorschreibt. Der Schwebeflug schneidet einige Dezimalstellen ab, wodurch die Genauigkeit verringert wird.
quelle
Normalerweise verwende ich den
float
Typ, wenn ich nicht viel Präzision benötige - zum Beispiel für Geld -, was falsch ist, aber das ist, was ich falsch gewohnt bin.Andererseits benutze ich,
double
wenn ich mehr Präzision brauche, zum Beispiel für komplexe mathematische Algorithmen.Der C99-Standard besagt Folgendes:
Ich habe es nie wirklich benutzt
long double
, aber ich benutze C / C ++ nicht so oft. Normalerweise verwende ich dynamisch getippte Sprachen wie Python, bei denen Sie sich nicht um die Typen kümmern müssen.Weitere Informationen zu Double vs Float finden Sie in dieser Frage bei SO .
quelle
Decimal
ist ein Gleitkommatyp und normalerweise eine gute Wahl für Geldberechnungen.