Frage

Kann ein Doppel (einer bestimmten Anzahl von Bytes mit einem vernünftigen Mantissa/Exponent -Saldo) immer genau den Bereich einer nicht signierten Ganzzahl von der Hälfte dieser Anzahl von Bytes halten?

ZB kann ein acht Byte den Zahlenbereich eines vier nicht signierten Byte -Int -Bereichs doppelt genau halten?

Dies wird darauf zurückzuführen, dass ein zwei Byte -Schwimmer den Bereich von einem ein Byte nicht signierten int halten kann.

Ein ein Byte nicht signiertes Int wird natürlich 0 -> 255 sein.

War es hilfreich?

Lösung

Ein IEEE754 64-Bit-Doppel kann jede 32-Bit-Ganzzahl darstellen, einfach weil es 53-ODD hat(a) Bits für Präzision und die 32-Bit-Ganzzahl nur benötigt, na ja, 32 :-)

Es wäre plausibel für eine (nicht iEEE754 doppelte Präzision) 64-Bit-Schwimmpunktzahl, die weniger als 32 Bit Präzision aufweist. Das würde wirklich große Zahlen (aufgrund des Exponenten) ermöglichen, aber auf Kosten der Präzision.

Das Fazit ist, dass es im Mantissa der schwimmenden Punktzahl mehr Präzisionsbits gibt als in der Ganzzahl (und genügend Bits im Exponenten, um es zu skalieren), kann es ohne Präzisionsverlust dargestellt werden.


(a) Technisch gesehen ist das 53. Stück Präzision impliziert 1 Zu Beginn der Sequenz darf die Menge an "Variable" nur 52 Bit betragen. Egal, ob es sich um 52 oder 53 Jahre handelt, es sind immer noch genug Teile, um jede 32-Bit-Ganzzahl darzustellen.

Andere Tipps

Ja. Ein Schwimmer (oder das Doppel) repräsentiert garantiert eine ganzzahlige Ganzzahl, die nicht abgeschnitten werden muss. Für ein Double gibt es 53 Bit Präzision, so dass es mehr als genug ist, um genau 32 Bit -Ganzzahl und einen winzigen (statistisch gesehenen) Anteil von 64 Bits darzustellen.

Genau der Bereich ist, dass Sie genau darstellen können, hängt von vielen Faktoren in Ihrer Implementierung ab, aber Sie können es senken, indem Sie sagen, dass Sie, wenn das Exponentfeld auf 0 eingestellt ist Ihr Mantissa -Feld (unter der Annahme eines Zeichenbits). Für IEEE 754 doppelte Präzision bedeutet dies, dass Sie genau 52-Bit-Zahlen genau darstellen können. Im Allgemeinen wird Ihr Mantissa mehr als die halbe Breite der Gesamtstruktur sein.

Weitere Informationen darüber, wie ein Doppel funktioniert, möchten Sie sich diesen Blog -Beitrag vielleicht ansehen: Anatomie einer schwebenden Punktzahl.

Ich würde die Wörter nicht "vollständig genau" verwenden, wenn ich über Gleitkomma-Zahlen spreche. Aber ja, a double kann eine 32-Bit-Ganzzahl darstellen.

Ich weiß nicht, welche anderen Kombinationen von Floats und INTs, für die dies auch gilt.

Praktisch gesehen möchten Sie sich nicht die Mühe machen, über dem, was Ihre Maschine unterstützt, zu verwenden. Wechseln Sie also einfach mit Bignums auf rationale Arithmetik. Auf diese Weise sind Sie garantiert Präzision.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top