Gast
#5290727
Hallo Leute, ich habe eine Frage bezüglich der Konversion von binären Floating-Point-Zahlen in Dezimalzahlen. Das Schema ist mir klar, es existiert ein VZ-Bit, dann folgt der Exponent, der um den Biaswert noch verschobene werden muss. Die Mantisse gibt die Nachkommastellen an, wobei durch die Normierung noch +1 addiert werden muss. Multipliziert mit 2^exponent erhalte ich die Dezimalzahl. So weit so gut. Allerdings habe ich Schwierigkeiten diese normierte Darstellung mit den allgemeineren Formeln in der Literatur in Einklang zu bringen. Bspw. heißt es in "Accuracy and Stability of Numerical Algorithms", dass eine FP-Zahl folgendermaßen darstellbar ist: y = m * ß^(e-t), wobei m die ganzzahlige Mantisse, e der Exponent und t die Anzahl signifikanter Stellen in der Mantisse ist. Für die Mantisse gilt ß^(t-1) <= m <= ß^t - 1, damit das System normiert ist. Ich schaff es jedoch nicht, den korrekten Dezimalwert mit dieser Formel zu berechnen. Beispiel: 4 Bit Exponent, 10 Bit Mantisse (VZ ist hier weggelassen): 0xD6BC 1.) herkömmliche Konversion * Der Exponent ist 0xD = 13, abzgl. Biaswert (2^(4-1)-1=7) ergibt 6 * Mantisse ist 0110101111 (die weiteren Nullen habe ich weggelassen), entnormiert lautet sie 1.0110101111 = 1 + 2^-2 + 2^-3 + ... = 1.4208984375 * Das Endergebnis ist dann 1.4208984375 * 2^6 = 90.9375 und das ist korrekt 2.) Konversion mit der Formel * Exponent bleibt gleich, e = 6 * Mantisse: 10 Bit werden gespeichert, 11 Bit besitzt die "reale" Mantisse, die führende 1 wurde weggelassen und ist quasi implizit gespeichert. Also gilt real 0110101111 => 10110101111 = 1455 im Dezimalsystem, das passt zu den oben genannten Grenzen für das normierte System * y = 1455 * 2^(6-11) = 1455 * 2^(-5) = 45.46875, also genau die Hälfte des obigen Ergebnisses Was übersehe ich dabei?