Dezimalstellen mit doppelter Genauigkeit
Frage:
Trotz der Dokumentation, die darauf hindeutet, dass Werte mit doppelter Genauigkeit vorliegen Da sie eine Genauigkeit von 15 Dezimalstellen haben, weisen interne Werte häufig eine höhere Genauigkeit auf. Warum wird diese Diskrepanz beobachtet?
Antwort:
IEEE-Doubles haben 53 signifikante Bits und bieten eine Genauigkeit von ca. 15,95 Dezimalstellen (basierend auf der Formel log10(253)). Diese theoretische Genauigkeit ist etwas größer als die 15 Dezimalstellen, die von der DBL_DIG-Konstante angegeben werden. Die zusätzliche Genauigkeit wird durch das zusätzliche signifikante Bit erklärt.
Die Funktion nextafter() demonstriert die wahre Genauigkeit eines bestimmten Doubles. Durch die Berechnung der darstellbaren Zahlen, die einem bestimmten Wert am nächsten kommen, wird deutlich, dass Werte mit doppelter Genauigkeit normalerweise 16 signifikante Stellen haben.
Hier ist ein Programm, das dies veranschaulicht:
#include <cstdio> #include <cfloat> #include <cmath> int main() { double x = 1.0/7.0; printf("FLT_RADIX = %d\n", FLT_RADIX); printf("DBL_DIG = %d\n", DBL_DIG); printf("DBL_MANT_DIG = %d\n", DBL_MANT_DIG); printf("%.17g\n%.17g\n%.17g\n", nextafter(x, 0.0), x, nextafter(x, 1.0)); }
Die Ausgabe zeigt dies normalerweise :
Das obige ist der detaillierte Inhalt vonWarum erscheinen Zahlen mit doppelter Genauigkeit genauer als 15 Dezimalstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!