Festkomma - Arithmetik

OP #722638
Lesenswert?

Hallo,

das Prinzip, das hinter der Festkomma-Arithmetik steckt, ist mir glaub 
ich klar; nach dem Komma finden sich von links nach rechts die 
Bruchteile 1/2, 1/4, 1/8....
Wie ich es implementieren soll leider nicht so ganz.

Eine Division / Multiplikation mit einer Zweier-potenz ist trivial.
Ich muss aber leider mit dem Wert 60 multiplizieren...

Wie stell ich das an? Ich würde intuitiv zuerst den Ganzzahl-Anteil 
multiplizieren, und dann die Nachkommastellen*60 drauf addieren.

Aber wie muss ich die Nachkommastellen anschauen? Einfach aus dem Vektor 
ausschneiden und dann mal 60 nehmen ist ja logischerweise Unsinn.
Gast #722689
Lesenswert?

Da 60 selbst eine Ganzzahl ist [1], geht das einfach: Den Wert der 
Festkommazahl als Ganzzahl interpretieren und mit der Ganzzahl 60 
multiplizieren [2], und das Ergebnis als Festkommazahl interpretieren.

Das funzt, weil die Festkommadarstellung A der Zahl A*2^(-n) entspricht 
(bei n Nachkommastellen in der Darstellung). Die Ganzzahldarstellung 
B=60 entspricht auch der Zahl B=60, und dann ist
(A*2^(-n)) * B = (A*B) * 2^(-n)

[1] Schwieriger wirds wenn beide Faktoren Festkommazahlen sind, 
insbesondere wenn du dabei weder Genauigkeit noch Wertebereich verlieren 
willst. Wenn du darüber stolperst ist das ne Fragestellung für sich 
wert.

[2] Geht einfach aber langsam, wenn es einen Befehl für 
Ganzzahlmultiplikation gibt. Ansonsten ist
60*x = (64 - 4)*x = 64*x - 4*x = (x << 6) - (x << 2)
-> Zweimal schieben, eine Subtraktion

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren