double Nachkommastellen



  • Hallo,

    ein IEEE hat eine 52 bit Mantisse.

    2^52 - 1 ergibt die größte Nachkommazahl. Diese hat 16 STellen. In Wikipedia steht aber dass sie 15 hat. Wer hat nun Recht ?



  • In der Wikipedia steht, dass double mindestens 15 Nachkommastellen bietet...

    15<log10(253)<1615 < \log_{10}\left(2^{53}\right) < 16


  • Mod

    2^52-1 ~ 4.5*10^15
    Stell damit mal die Zahl 5.123456789012345 auf ihre 16 Stellen genau dar...



  • Also erstmal sind das nicht "Nachkommastellen" sondern die Zahl der signifikanten Stellen.

    Zweitens basiert IEEE-754 auf einer Binärdarstellung. Im normalisierten Fall sieht das so aus:
    1,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2 * 2exp
    wobei die 52 Xs jeweils 1 oder 0 sein können. Daraus folgt, dass der maximale relative Fehler der Darstellung 2-53 ist.

    Ja, man kann jetzt umrechnen, wievielen Dezimalstellen das ungefähr entspricht. Aber es macht einen riesengroßen Unterschied, was die führende Dezimalstelle ist. Ist die führende Dezimalstelle eine 1, so ist die mögliche Genauigkeit hoch genug, dass man insgesamt 16 Dezimalstellen kontrollieren kann. Ist die führende Dezimalstelle eine 9, kann man durch die Wahl der IEEE-754 Bits nur 15 Dezimalstellen kontrollieren, wenn man die Zahl in eine Dezimaldarstellung umwandelt, weil die 52 Bits nicht mehr für die 16 Stelle ausreichen:

    1,4267...  -->    1,    01101101001111... * 2^0
    9,4267...  -->    1,001 01101101001111... * 2^3
                        ^^^
        Diese 3 Mantissenbits fehlen 
      natürlich am Ende in diesem Fall
    

    Anderes Beispiel:

    1,000000000000000 0000000...
    1,000000000000000 2220446...
    1,000000000000000 4440892...
    ^ ^^^^^^^^^^^^^^^
     16 signifikante
      Dezimalstellen
    

    sind die drei kleinsten Zahlen, die größer oder gleich 1 sind und als IEEE-754 64-Bit-Float darstellbar sind. In diesem Bereich ist die Genauigkeit offensichtlich ein kleines bisschen größer als 16 signifikante Dezimalstellen, weswegen man in der Dezimaldarstellung 17 Stellen benötigen würde, um eine double-Zahl in dem Bereich eindeutig beschreiben zu können. Aber in einem anderen Bereich:

    8,000000000000000 0000000...
    8,000000000000001 7763568...
    8,000000000000003 5527136...
    8,000000000000005 3290705...
    8,000000000000007 1054273...
    ^ ^^^^^^^^^^^^^^^
     16 signifikante
      Dezimalstellen
    

    Dies hier sind die kleinsten darstellbaren Zahlen ab 8. Und wenn man diese auf 16 signifikante Stellen rundet, erhält man als letzte Ziffern 0,2,4,5,7. Irgendwie sind hier 1 und 3 z.B. gar nicht durch Runden erreichbar. Ein IEEE-754 Float ist also in diesem Fall keine ganzen 16 Dezimalstellen genau. Man kann nur die ersten 15 signifikanten Dezimalstellen beliebig kontrollieren.


Anmelden zum Antworten