Forum: Compiler & IDEs Taktschritte für Gleitkommadivision


von Lightlancer (Gast)


Lesenswert?

Wieviele Taktschritte benötigt ein AtMega8 eigentlich für eine 
Gleitkommedivision von normalen Realvariablen?

von A.K. (Gast)


Lesenswert?

Reichlich. Genauer: ausprobieren und nachmessen (Simulator).

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hängt übrigens stark vom Divisor ab.

von Plo (Gast)


Lesenswert?

Eine Floatingpoint Division ist eine Integerdivision plus das Anpassen 
der Exponenten. Durch den Exponenten wird der integer etwas kuerzer.

P

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

ca 1500 - 2000 Takte

Und wenn das zu viel ist, und +Inf -Inf NaN in den Operanten nicht
vorkommen kann, und eine Genauigkeit von 1 ppm ausreicht, dann nimm
_divsf3.s aus dem thread Beitrag "float arithmetic" ,
Archiv home.zip

von G. Nicht (Gast)


Lesenswert?

@Hans-jürgen Herbert

Deine Angaben haben jeweils eine Null zuviel. Bei 16MHz braucht eine 
fdiv ca. 15-20µs, wenn ich nicht irre.

von Benedikt K. (benedikt)


Lesenswert?

@Hans-jürgen Herbert
Dein Link ist kaputt

@G. Nicht
Bist du sicher ?
Das wäre ja schneller als eine long Division !

von G. Nicht (Gast)


Lesenswert?

>Bist du sicher ?

ja.

von A.K. (Gast)


Lesenswert?

Könnte schon sein. Immerhin gibt es bei float nur so um die 24 
Mantissenbits.

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

Am Link war das Komma zu viel : Also 
Beitrag "float arithmetic"

von G. Nicht (Gast)


Lesenswert?

>Immerhin gibt es bei float nur so um die 24


Was heißt hier "nur"? Ersetze es durch "immer"!

von A.K. (Gast)


Lesenswert?

> Was heißt hier "nur"?

Nur heisst: 24 < 32.

von G. Nicht (Gast)


Lesenswert?

@A.K.

10/3 = 3; bei long sind nur noch 2 Bit von Bedeutung, der Rest liegt 
brach.
10/3.0 = 3.333333; bei float werden die 24 Bit der Mantisse voll 
genutzt.

immer heißt: 24 > 2

Da ich glaube, Deine Antwort zu kennen, nimm für Deine Beispielrechnung 
am besten 987654321/70000 :-)

von Rolf Magnus (Gast)


Lesenswert?

> 10/3 = 3; bei long sind nur noch 2 Bit von Bedeutung, der Rest liegt
> brach.

Hm? Du meinst also, eine Änderung eines beliebigen der anderen 30 Bits 
sorgt nicht für eine Änderung des Wertes, weil sie ja unbedeutend sind? 
Oder was willst du ausdrücken?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.