PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleinste int-Zahl die nicht fehlerfrei zu double konvertiert werden kann?! [IEEE]


bennihp
2013-11-07, 12:34:27
Hey!

mir hat sich im Zuge einer Uni-Aufgabe folgende Frage aufgeworfen:
Es ging darum, die Frage zu beantworten, was die kleinste integer Zahl ist, die nicht fehlerfrei zu double konvertiert werden kann.

Double heißt 64 Bit, bei IEEE sieht die Verteilung ja wie folgt aus.

1 Bit = Vorzeichen
11 Bit = Exponent
52 Bit = Mantisse

Angeblich ist die Lösung: 2^53 + 1
53, weil wir noch durch das HiddenBit ein Bit geschenkt bekommen. 2^53 ist also in double darstellbar, 2^53 + 1 nicht mehr. Wenn ich das mit Python umrechne, dann stimmt das auch.
Wenn ich nun aber 53 Bits habe, wieso kann ich die nicht alle mit einer 1 belegen? Somit hätte ich die Zahl 2^54 -1 und die nächste Zahl die nicht mehr fehlerfrei konvertierbar wäre: (2^54 -1) +1, sprich 2^54.

Hoch 53 + 1 scheint definitiv richtig zu sein, aber ich kann mir nicht erklären warum das so ist.

Gibts hier Zahlenspezialisten?

Danke schonmal!
Viele Grüße

hadez16
2013-11-07, 13:03:21
Hi

Wenn man eine 1 nimmt und beliebig viele 0 dranhängt...
eine einstellige Zahl 1 ist 2 hoch Null
Zweistellig 10 ist 2^1
Dreistellig wäre 2^2
usw...
Die Hidden-1 und 52 Mantissenstellen (mit 0) sind 53 Stellen =2^52
Alle 53 Stellen auf 1 ergibt (2^53)-1

Einfach nur die Mantisse als int zu betrachten (und einen "neutralen" Exponent annehmen)
bringt einen bei diesen Größen also schon nicht mehr weiter.

Die Darstellung von 2^53 wäre: Die Mantisse voller Nuller und die Hidden-1 dazu
ist 2^52, dazu ein Exponent, der dem Ganzen
noch eine Zweierpotenz zusätzlich gibt = 2^52 * 2^1 = 2^53

Die Mantisse um eins erhöht (letzte Stelle 1):
(1) 00000000...0001 = 2^52 + 1
Dazu der Exponent (2^52 + 1) * 2^1 = 2^53 + 2
Damit hätte man die Darstellungen von 2^53 allein
und auch 2^53+2, aber 2^53+1...geht eben nicht.

(Die Bedeutung des Exponents ist hier verglichen zur tatsächlichen Zahl im Computer
gleich dreimal vereinfacht, aber ist hier eigentlich egal).


http://www.tutorials.de/coders-talk/396206-kleinste-int-zahl-die-nicht-fehlerfrei-zu-double-konvertiert-werden-kann-ieee.html

Matrix316
2013-11-07, 13:06:14
Hmmm: http://www.mpdvc.de/artikel/FloatingPoint.htm

AnPapaSeiBua
2013-11-08, 14:52:18
1. 2^54 ist fehlerfrei darstellbar...
2. Selbst wenn das nicht so wäre: Es ist ja nach der kleinsten nicht mehr fehlerfrei darstellbaren gefragt. Und 2^53+1 ist ja kleiner als als 2^54.