Ich habe über den Unterschied zwischen doppelter Präzision und einfacher Präzision gelesen. Allerdings in den meisten Fällen, float
y double
scheinen 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?
Antworten
Zu viele Anzeigen?Die Größe der Zahlen, die an den Fließkommaberechnungen beteiligt sind, ist nicht der wichtigste Faktor. Entscheidend ist die Berechnung, die durchgeführt wird.
Wenn Sie eine Berechnung durchführen und das Ergebnis eine irrationale Zahl oder eine wiederkehrende Dezimalzahl ist, kommt es zu Rundungsfehlern, wenn diese Zahl in die von Ihnen verwendete Datenstruktur mit endlicher Größe gequetscht wird. Da double doppelt so groß ist wie float, ist der Rundungsfehler viel geringer.
Die Tests können speziell Zahlen verwenden, die diese Art von Fehler verursachen würden, und haben daher geprüft, ob Sie den entsprechenden Typ in Ihrem Code verwendet haben.
Typ float, 32 Bits lang, hat eine Genauigkeit von 7 Stellen. Er kann zwar Werte mit sehr großem oder sehr kleinem Bereich speichern (+/- 3,4 * 10^38 oder * 10^-38), hat aber nur 7 signifikante Stellen.
Typ double, 64 Bits lang, hat einen größeren Bereich (*10^+/-308) und eine Genauigkeit von 15 Ziffern.
Der Typ long double hat nominell 80 Bits, obwohl er bei einer bestimmten Compiler/OS-Paarung aus Gründen der Ausrichtung als 12-16 Bytes gespeichert werden kann. Der lange Double hat einen Exponenten, der einfach lächerlich groß ist und eine Genauigkeit von 19 Stellen haben sollte. Microsoft hat in seiner unendlichen Weisheit long double auf 8 Bytes begrenzt, genau wie plain double.
Im Allgemeinen sollten Sie den Typ double verwenden, wenn Sie eine Fließkommazahl/Variable benötigen. Literale Fließkommazahlen, die in Ausdrücken verwendet werden, werden standardmäßig als Doubles behandelt, und die meisten mathematischen Funktionen, die Fließkommazahlen zurückgeben, geben Doubles zurück. Sie ersparen sich viele Kopfschmerzen und Typwahlen, wenn Sie einfach double verwenden.
Fließkommazahlen haben eine geringere Genauigkeit als Doppelzahlen. Obwohl Sie es bereits wissen, lesen Sie Was wir über Fließkommaarithmetik wissen sollten zum besseren Verständnis.
Bei der Verwendung von Fließkommazahlen können Sie nicht darauf vertrauen, dass Ihre lokalen Tests genau den Tests entsprechen, die auf der Serverseite durchgeführt werden. Die Umgebung und der Compiler sind auf Ihrem lokalen System wahrscheinlich anders als dort, wo die endgültigen Tests ausgeführt werden. Ich habe dieses Problem schon oft bei TopCoder-Wettbewerben gesehen, vor allem wenn Sie versuchen, zwei Fließkommazahlen zu vergleichen.