Heim > Backend-Entwicklung > C++ > Warum erscheinen Zahlen mit doppelter Genauigkeit genauer als 15 Dezimalstellen?

Warum erscheinen Zahlen mit doppelter Genauigkeit genauer als 15 Dezimalstellen?

Mary-Kate Olsen
Freigeben: 2024-11-30 18:04:16
Original
644 Leute haben es durchsucht

Why Do Double-Precision Numbers Seem More Precise Than 15 Decimal Places?

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));
}
Nach dem Login kopieren

Die Ausgabe zeigt dies normalerweise :

  • 1.0/7.0 ist mit ca. 16 Signifikanten vertreten Ziffern.
  • Das letzte Hexadezimalbit wechselt für aufeinanderfolgende Werte zwischen 0 und 1.
  • Der mathematische Wert von 1,0/7,0 (0,142857142857142857) wird nur ungefähr in doppelter Genauigkeit dargestellt.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage