Häufig verwendet man 16 oder 32bit Integer um aufwendige Fließkommaberechnungen zu umgehen. Gibt es irgendwas fertiges, speziell für AVR optimiertes für z.B. sqrt(), pow(), sin() usw. ?
>>Häufig verwendet man 16 oder 32bit Integer um aufwendige
Fließkommaberechnungen zu umgehen.
häufig??? -wo denn??? integer-sinus???
Google mal nach CORDIC. Klein werden die Funktionen aber auch nicht wenn es genau sein soll. Reiner
Mich wundert auch, dass es für Mikrocontroller keine Festkomma-Implementierungen gibt. Ein generisches Zahlenformat wie 8.8 oder 16.16 würde für dei meisten Anwendungen mit ungeraden Zahlen reichen und wäre wesentlich performanter als floating-point (zumindest auf einem 8-bitter). Sicherlich kann ich das alles auch händisch in C-Code nachbilden doch in punkto Lesbarkeit bleibt vom Code nichtmehr viel übrig.
".. und wäre wesentlich performanter als floating-point (zumindest auf einem 8-bitter)." Das sind doch alles nur Gerüchte. Wie kommst Du zu solch einer Aussage ???
Hi, gerade sin/cos und atan2 geht gut in Integer/Cordic ohne Multiplikation. sqrt gips auch schöne integer Routinen. Setzt doch mal hier im Forum nen Eckchen auf, wo man das reinstellt. Cheers Detlef
> Mich wundert auch, dass es für Mikrocontroller keine > Festkomma-Implementierungen gibt. Es gab bislang keinen C-Standard dafür. Mittlerweile gibt es aber einen Vorschlag.
ich meine von Microchip gibt es PIC-Assembler-Applikatioen zu verschiedenen mathematischen Funktionen. Gibts von Atmel für AVR vergleichbares ? Ich meine, mindestens größere Multiplikations- und Divisionsroutinen gesehen zu haben. Oder soll das ganze in C stattfinden ?
Vier mathematische Appnotes hab ich gefunden: AVR200: Multiply and Divide Routines (19 pages, revision B, updated 10/98) This Application Note lists subroutines for multiplication and division of 8 and 16-bit signed and unsigned numbers. AVR201: Using the AVR Hardware Multiplier (11 pages, revision C, updated 6/02) Examples of using the multiplier for 8-bit arithmetic. AVR202: 16-Bit Arithmetics (3 pages, revision B, updated 5/02) This Application Note lists program examples for arithmetic operation on 16-bit values. AVR204: BCD Arithmetics (14 pages, revision B, updated 01/03) This Application Note lists routines for BCD arithmetics. aber Wurzel oder Sinus ist nicht darunter
Microchip listet unter Appnotes/Algorithm/math folgendes: Appnotes Description Date Launch TB043 KEELOQ® CRC Verification Routines 11/8/04 AN670 Floating Point to ASCII Conversion 9/11/01 AN752 AN752 CRC Algorithm for MCRF45X Read/Write Device 3/15/01 TB040 Fast Integer Square Root 10/16/00 AN730 CRC Generating and Checking 5/22/00 TB028 Technique to Calculate Day of Week 8/23/99 TB026 Calculating Program Memory Checksums Using a PIC16F87X 11/6/98 AN526 PIC16C5x/PIC16Cxx Utility Math Routines 8/26/97 AN616 Digital Signal Processing with the PIC16C74 8/26/97 AN542 Implementation of Fast Fourier Transforms 8/26/97 AN660 Floating Point Routines 8/26/97 AN540 Implementing IIR Digital Filters 8/26/97 AN575 IEEE 754 Compliant Floating Point Routines 8/26/97 AN643 Adaptive Differential Pulse Code Modulation using the PIC16/17 8/26/97 AN544 Math Utility Routines 8/26/97 AN617 Fixed Point Routines 8/26/97
Ich habe mir vor einigen Jahren ein Buch zum Thema mathematische Algorithmen gekauft, anscheinend gibt es eine Neuauflage: Computer Arithmetic Algorithms von Israel Koren Sprache: Englisch Gebundene Ausgabe - 296 Seiten - A K Peters Ltd Erscheinungsdatum: 2001 Auflage: 2nd ISBN: 1568811608 die erste auflage war von 1993. Nicht speziell für eine bestimmte Programmiersprache / CPU, nur die allgemeinen Lösungswege. "Synopsis" bei Amazon: This text explains the fundamental principles of algorithms available for performing arithmetic operations on digital computers. These include basic arithmetic operations like addition, subtraction, multiplication, and division in fixed-point and floating-point number systems as well as more complex operations such as square root extraction and evaluation of exponential, logarithmic, and trigonometric functions. The algorithms described are independent of the particular technology employed for their implementation. Numerical examples illustrate the working of the algorithms presented and explain the concepts behind the algorithms without relying on gate diagrams. This new edition includes sections on floating-point adders, floating-point exceptions, general carry-look-ahead adders, prefix adders, Ling adders, and fused multiply-add units. New algorithms and implementations have been added to almost all chapters. An on-line JavaScript-based simulator for many of the algorithms contained in the book is available at: www.ecs.umass.edu/ece/koren/arith/simulator. Vielleicht kann jemand noch andere Bücher zum Thema empfehlen. Ich habe allerdings aus dem "Koren" bisher noch nichts verwendet.
Vielleicht in der Computerbibel "The Art Of Computer Programming" von Donald Knuth ? Es scheint ein Standardwerk zu sein, mindestens 4 Bände, teilweise soll auch eine deutsche Version existieren. Ich habe noch nicht drin geblättert, bei Amazon kann man das Inhaltsverzeichnis und das Indexregister besichtigen, sowie ein kurzes Kapitel über Zufallszahlen. Leider ist der Suchbegriff "Algorithmen" in der Computerliteratur mehr auf Datenbank-Suchstrategien und ähnliches bezogen, weniger auf elementare Mathematikfunktionen.
Kapitel 4 wurde ins deutsche übersetzt: "Arithmetik" ISBN 3-540-66745-8. Das ist übrigens das einzigste Kapitel das wirklich interessant ist, meiner Meinung nach. Ansonsten ist das Buch so nicht zu bekommen, mal auf dem Trödler schauen. Ich meine interesanter wäre eine kleine Lib die die Fixpoints auf dem AVR benutzen -> FMUL etc.pp. Gruß Hagen
Näherungsformeln sind auch selten zu finden, ich weiß nicht mehr, wo ich diese Näherung an den "Pythagoras" ( Wurzel aus (x^2 +y^2)) gelesen hatte. Der Kreis wird durch sein eingeschriebenes Achteck angenähert. Ich habe damit ein Wettersatelliten-Signal auf dem AVR demoduliert. Das Wetterbild ist auf einen 2400Hz Träger amplitudenmoduliert. Mit 9600 Abtastungen pro Sekunde sind die einzelnen Abtastwerte immer um 90 Grad auf der 2400Hz-Schwingung versetzt, sodaß der "Pythagoras" die Amplitudeninformation liefert.
Hi, Iteration für ne Quadraturzel geht auch gut mit(xi+1)=(x(i)+a/x(i))/2 wenn man billig dividieren kann. Beträge von Vektoren ( Wurzel aus (x^2 +y^2)) gehen in der Regel besser, wenn man das nicht mit quadrieren/wurzelziehen macht, sondern den Vektor mit einem Cordic-Verfahren auf die x- oder y-Achse dreht, dann hat man den Betrag direkt. Das geht auch auf nem FPGA ohne multiplizieren. Cheers Detlef
kommastellen kann man sich sparen, wenn man die ganzzahlen einfach anfangs mit 100 multipliziert und dann in das in der auswertung berücksichtigt. Meistens jedenfalls.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.