Guten Tag,
ich programmiere gerade eine Festkommadarstellung in 32bit. Ich brauche
3 Vorkomma- und 2 Nachkommastellen(10 Vorkommabits, 22 Nachkommabits).
Zur Ausgabe habe ich mir diese kleine Routine geschrieben. Diese
funktioniert soweit auch, allerdings werden Zahlen <0,1 falsch
ausgegeben. Wenn ich einfach mal mit einer For-Schleife alle Zahlen
durchprobiere, fängt die Ausgabe bei 0,1 an und nicht bei 0,01. Ich
finde allerdings den Fehler einfach nicht. Hat hier jemand mit mehr
Erfahrung eine Idee?
Grüße
Klaus
Es faengt schon damit an dass:
> 10 Vorkommabits
eben nicht fuer
> 3 Vorkomma- ... stellen
reichen. Da fehlt schon mal das Bit fuer das Vorzeichen.
Ansonsten muss man eine Q10.22 Zahl nur mit ihrem
Skalierungsfaktor multiplizieren, um sie als Gleitkommazahl
zu erhalten.
ich habe vergessen zu erwähnen, dass ich nur unsigned Integer brauche,
deshlab sollten 10 Vorkommabits eigentlich reichen, oder? Die Ergebnisse
sind ja richtig außer wenn ein Ergebnis <0,1 herauskommt.
A. S. schrieb:> Wenn deine Nachkommastellen 10...99 sind, geht es, wenn 0..9, dann fehlt> die führende 0.
So schaut das richtig aus:
printf("%d,%02d\r\n", Vorkomma, Nachkomma);
Klaus schrieb:> 3 Vorkomma- und 2 Nachkommastellen(10 Vorkommabits, 22 Nachkommabits).
Und dann meinst du, das mit printf zum Schluß zu machen. Hmm...
Hier mal etwas aus dem Stegreif:
(hoffentlich nicht vergaloppiert)
Klaus schrieb:> Tatsache, vielen Dank für die Antwort. Da hätte ich wahrscheinlich noch> lange dran gesessen :D.>> Schönes Restwochenende
Das ist aber nur die halbe Miete. Du musst noch dafür sorgen, daß die
'Nachkomma' Variable maximal 2-stellige Werte annehmen kann, sonst wird
wieder nur Mist angezeigt. Bei deiner Formel geht der Wertebereich bis
100.