Ich habe über den Unterschied zwischen doppelter Genauigkeit und einfacher Genauigkeit gelesen. In den meisten Fällen scheinen jedoch "Float" und "Double" austauschbar zu sein, d. h. die Verwendung des einen oder des anderen scheint die Ergebnisse nicht zu beeinflussen. Ist dies wirklich der Fall? Wann sind Floats und Doubles austauschbar? Was sind die Unterschiede zwischen ihnen?
Hier ist, was der Standard C99 (ISO-IEC 9899 6.2.5 §10) oder C++2003 (ISO-IEC 14882-2003 3.1.9 §8) Standards sagen:
Es gibt drei Gleitkommatypen: Float", "Double" und "Long Double". Der Typ
double
bietet mindestens die gleiche Genauigkeit wiefloat
, und der Typlong double
bietet mindestens die gleiche Genauigkeit wiedouble
. Die Menge der Werte vom Typfloat
ist eine Teilmenge der Menge der Werte vom Typdouble
; die Menge der Werte vom Typdouble
ist eine Teilmenge der Menge der Werte vom Typlong double
.
Der C++ Standard fügt hinzu:
Die Wertedarstellung von Fließkommatypen ist implementierungsabhängig.
Ich würde empfehlen, einen Blick auf das ausgezeichnete What Every Computer Scientist Should Know About Floating-Point Arithmetic zu werfen, das den IEEE-Gleitkommastandard eingehend behandelt. Sie lernen die Details der Darstellung kennen und werden feststellen, dass es einen Kompromiss zwischen Größe und Genauigkeit gibt. Die Genauigkeit der Fließkommadarstellung nimmt mit abnehmendem Betrag zu, so dass Fließkommazahlen zwischen -1 und 1 die höchste Genauigkeit aufweisen.
Fließkommazahlen haben eine geringere Genauigkeit als Doppelzahlen. Auch wenn Sie es bereits wissen, lesen Sie zum besseren Verständnis Was wir über Fließkommaarithmetik wissen sollten.