Normierungs-Trick oder Float Berechnung?

Gast #310949
Lesenswert?

Servus,

kann mir jemand sagen was bei ca. 30 berechnungen (jeweils einmal
dividieren und addieren, also insgesamt 60 berechnungen, nacheinander)
schneller geht (ausgehend von float zahlen mit 3 nachkommastellen):

1. berechnung komplett in float durchführen und evtl daran beteiligte
integer werte auf float zwangskonvertieren

oder

2. mit "normierungs-trick" die float werte mit 1000 multiplizieren,
berechnungen durchführen und das ergebnis wieder in float wandeln

ich hoffe ihr könnt so ungefähr verstehen wie/was ich meine :-/

mfg, Marcus

PS: programmierung in C für nen Renesas M32C mit HEW
Gast #310950
Lesenswert?

http://www.mikrocontroller.net/forum/read-1-315021.html#new

Noch einmal, wenn Du 'float' brauchst, dann nimm 'float'. Die
ganzen 'int' oder 'long' Optimierungen bringen eventuell ein
bißchen mehr Geschwindigkeit, was aber nicht zwingend sein muß. Bei
'long' wir mit 32 Bit gerechnet, bei 'float' jedoch nur mit 24 (für
die Mantisse), was durchaus schneller sein kann !!!
Der Vorteil von 'float': man braucht sich nicht um Rundung und
Nachkommastellen zu kümmern.

Programmier Deine Routine doch einfach einmal und messe die Laufzeit;
meines Erachtens wird sie unter 1 ms liegen. Wenn das reicht, belasse
es so. Wenn nicht, versuche die Divison mit einer 1/x Multiplikation zu
lösen; das geht u.U. schneller.
Gast #310951
Lesenswert?

Divisionen sind extrem aufwendig und zeitraubend. Braucht man eigentlich
auch nie (ich zumindest), außer Division mit ner Konstanten, und das
machts Du mit Multiplikation/Shiften. Wenn Du Zeit hast, nimm float,
wenn nicht überleg mal, ob Du nicht um die Division rumkommst!?

Cheers
Detlef
Gast #310953
Lesenswert?

@Marcus:

Ja, wenn Du genau für einen Prozessor schreibst, heisst die Devise bei
solchen Entscheidungen:

   Nicht raten, sondern messen.

Also, zwei Benchmarkprogramme schreiben. Dann nachschauen welcher
Algorhitmus schneller läuft, und diesen dann verwenden.

Wenn Du es ganz genau machen willst, kannst Du auch noch mit
verschiedenen Compiler-Optimierungs-Einstellungen testen. Entweder
systematisch alle Kombinationen einiger weniger Optimierungen
ausprobieren, oder mit einem genetischen Algorithmus die beste
Kombination aus einer vielzahl (alle) Optimierungsoptionen suchen
lassen.

Für die genetische Variante gibt es auch schon einige fertige Pakete
für den GCC (unter Linux/Unix). Die müsstest Du allerdings noch
anpassen dass die Zeiten auf dem Controller direkt gemessen werden
können.

Machbar ist das alles. Die Frage ist aber, lohnt sich der Aufwand?

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