www.mikrocontroller.net

Forum: GCC Dauer eine Division mit Kommazahl

Autor: WorkMännchen (Gast)
Datum: 01.05.2008 13:23

Hallo,

wie kann man ausrechnen bzw. schätzen, wie lange eine Division von eine
Double Zahl durch 1.002 mit 16MHz Atmega dauern würde?
Autor: Thomas Bremer (Firma Druckerei Beste) (virtupic)
Datum: 01.05.2008 14:10

Ich kenne den Prozessor nicht. Wenn er Hardware für die Division hat,
dann steht das im Datenblatt. Wenn nicht, dann musst du die
Ausführungszeit des entsprechenden Code ausrecchnen.

Alternativ kannst du messen. Du nimmst eine Reihe von vershiedenen
Zahlen, lässt sie durch 1.002 teilen misst die Ausführungszeit und
teilst durch die Anzahl der Zahlen.

Falls du es gerne schnell hättest, dann solltest du mit (1 / 1.002)
multiplizieren. Geht meistens schneller.

virtuPIC
Autor: yalu (Gast)
Datum: 01.05.2008 14:11

Da gibt es mehrere Möglichkeiten:

- Im erzeugten Assemblercode die Zyklen zählen,
- vom Simulator die Zyklen zählen lassen,
- auf realem AVR die Zyklen vom Bit-Timer/Counter zählen lassen oder
- auf realem AVR die Zeit für bspw. 100000 Divisionen mit der Stoppuhr
  messen.

Wenn es auf Geschwindigkeit ankommt, würde ich aber nicht durch 1.002
dividieren, sondern mit 1/1.002 multiplizieren.
Autor: Oliver (Gast)
Datum: 01.05.2008 14:17

Wenn es NUR auf Geschwindigkeit ankommt, würde ich die 2 Promille
Abweichung in Kauf nehmen, und die ganze Rechnerei sein lassen.

Oliver
Autor: Michael G. (linuxgeek) Benutzerseite
Datum: 01.05.2008 17:45

yalu wrote:

> Wenn es auf Geschwindigkeit ankommt, würde ich aber nicht durch 1.002
> dividieren, sondern mit 1/1.002 multiplizieren.

Gute Idee... sofern das ne Konstante ist musst das dann allerdings auch
so machen, die groesseren Megas koennen in HW multiplizieren.

Was willst denn ueberhaupt machen, vielleicht gibt es ja auch ne bessere
Loesung.
Autor: Tobias Frost (coldtobi)
Datum: 01.05.2008 18:08

Einfach im AVR Studio simulieren.. Der zählt die Clocks, die Du
brauchst, wenn Du den SW-Simulator nimmst.

PS: Ich hab in einem Projekt ein Polynom 3. Grades berechnet. Braucht
ca. 250us @ 4 Mhz.

1/1.002 ist im Übrigen in Ganzzahlarith. 1, hilft also nix, der HW
Multiplier.
Autor: Benedikt K. (benedikt)
Datum: 01.05.2008 18:25

Ich würde einfach 1/512 von der Zahl abziehen.
Das entspricht (bis auf Rundungsfehler) der Division durch 1,001957. Der
Fehler der dabei entsteht liegt bei 0,004%, und dürfte daher bei einer
16bit Zahl garnicht auftauchen (außer eben als +/-1LSB Rundungsfehler).
Autor: Jupp (Gast)
Datum: 01.05.2008 18:26

>wie kann man ausrechnen bzw. schätzen, wie lange eine Division von eine
>Double Zahl durch 1.002 mit 16MHz Atmega dauern würde?

Indem du das Programm schreibst und mit AVR Studio simulierst und die
Anzahl der Takte abliest, fertig.
Autor: mr.chip (Gast)
Datum: 01.05.2008 18:30

> 1/1.002 ist im Übrigen in Ganzzahlarith. 1, hilft also nix, der HW
> Multiplier.

Wenn man (nur ein wirklich kleines Stück) weiter  denkt, dann geht das
sehr wohl: Man shiftet die zu Zahlen einfach ein bisschen nach links, so
dass dann beispielsweise die 6 LSB Nachkommastellen darstellen.
Autor: Gerd (Gast)
Datum: 01.05.2008 18:35

>1/1.002 ist im Übrigen in Ganzzahlarith. 1, hilft also nix

Nicht ganz. 1/1.002 ist in Ganzzahl 10000000/1002 (4 gültige Ziffern in
1,002)

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net