2017-09-09 5 views
4

Ich stecke auf einer Hausaufgabe fest; Ich muss einen binären Fließkommawert in einen Dezimalbruch umwandeln. Ich habe das Gefühl, dass ich den Prozess verstehe, aber ich bekomme nicht die richtige Antwort. Hier ist mein Denkprozess.Wie werden binäre Gleitkommawerte in Dezimalbrüche umgewandelt?

Ich habe die binäre float: 0 000 101

  • Der Vorspannungsstrom für ein Exponentenfeld 3-Bit-3: 2^(3-1)-1 = 3
  • Die Mantisse 1.101 (Basis 2)
  • Der Wert des Exponenten-Bits wird , 0, minus die Anzahl der Exponenten Bits, 3, ist -3, so wird die Dezimalstelle der Mantisse nach links bewegt 3 Plätze
  • In Base-10, das ist 2^-3 + 2^-4 + 2^-6, was 0,203125 oder 13/64 entspricht.

13/64 ist jedoch nicht die richtige Antwort, der Auto-Grader akzeptiert es nicht. Wenn meine Antwort falsch ist, dann verstehe ich nicht warum, und ich hoffe, dass jemand mich in die richtige Richtung weisen kann.

Durch pures Glück vermutete ich 5/32 als Antwort und bekam es korrigieren; Ich habe keine Ahnung, warum das so ist.

+0

was sagt das es die richtige Antwort? –

+0

ein anderer Weg, um diese 0.001101 richtig oder falsch zu sehen ist das gleiche wie 1101/2^6 oder 13/64. also muss dein Exponent falsch sein? die richtige Antwort zu wissen, sollte das klarstellen, ja? –

+1

Mit purer Wahrscheinlichkeit schätzte ich 5/32 als die Antwort und bekam es richtig; Ich habe keine Ahnung, warum das der Fall ist – Grav

Antwort

4

In IEEE-754 Gleitkommaformaten ist exponent = 0 ein Denormalwert, wobei das implizierte führende Bit in der Mantisse 0 ist.

Wikipedia hat einen guten ausführlichen Artikel über das single-precision float (binary32) Format, mit vielen Beispielen. Für binary32 Schwimmer sind die Formeln (aus dem Wiki-Artikel):

(−1)^signbit × 2^(−126)  × 0.significandbits ; denormal, expbits=0 
(−1)^signbit × 2^(expbits−127) × 1.significandbits ; normal 
Inf or NaN (depending on mantissa aka significant); expbits = all 1s 

(Beachten Sie, dass 0.0 ein Sonderfall denormal ist, ist aber nicht wirklich ein denormal betrachtet).

Wie auch immer, mit Null-Exponenten, feststellen, dass der Exponent nicht mehr expbits - bias, dann ist es ein höher.


Zurück zu Ihrem Fall: Ihre Mantisse 0.101 binär, 0,625 dezimal (I 0b101/8 in calc angeschlossen).

2^-2 * 0.101 (binär) = 2^-2 * 0,625 (dezimal) = 0,15625 = 5/32


Es gibt eine https://en.wikipedia.org/wiki/Minifloat wikipedia Artikel, der (mit Beispielen) erwähnt ein 8 -bit-IEEE-Format sowie einige andere weniger als 32-Bit-Formate im realen Leben auf Computer-Grafik-Hardware verwendet. (z.B. 24-Bit oder 16-Bit). Interessante Fakten: x86 kann Vektoren von 16-Bit-Gleitkommazahlen halber Genauigkeit laden/speichern, indem es mit der F16C ISA extension on/fly in einzelne Register konvertiert.

Siehe auch diesen Online-Konverter mit Check-Boxen für Bits: https://www.h-schmidt.net/FloatConverter/IEEE754.html

Verwandte Themen