Hallo,
ich habe für 32bit den Cordic-algorithmus implementiert. Wer es mag,
kann bis zu letzten Stelle rechnen, ich habe nach den ersten 15bit schon
abgebrochen. Das Ergebnis ist ein 32bit Winkel (-180Grad=-2^31,
180Grad=+2^31).
Falls jemand Bedarf dafür hat, einfach kopieren und einbauen.
Ich denke, der Code sollte schon recht rechenzeitoptimal sein.
Vielleicht fallen Euch ja noch ein paar Optimierungen ein.
Viel Spaß damit
OR
Hallo,
habe versucht das obige zu verwenden ...
Die arctan2(1;1) sollte in Grad pi/4 - Radiant (0,785398) liefern.
Jedoch erhält man mit der obigen Funktionen einen ganz anderen Wert...
Ist der Code wirklich korrekt ??
Hallo "OR",
die Funktion realisiert den CORDIC Algorithmus.
Prinzipiell erscheint sie mir in Ordnung zu sein,
jedoch sind die Werte in der Tabelle nicht alle richtig.
Ich habe es mit Excel nachgerechnet.
Demnach ist der erste Wert ok, die folgenden 10 jedoch nicht ganz.
Ab dem 12. Wert passt es wieder.
Meine berechneten Werte sind
1.073.741.824
633.866.811
334.917.815
170.009.512
85.334.662
42.708.931
21.359.677
10.680.490
5.340.327
2.670.173
1.335.088
667.544
333.772
166.886
83.443
41.722
20.861
10.430
5.215
2.608
1.304
652
326
163
81
41
20
10
5
3
1
You can improve the accuracy of arctan if use Meggitt algorithm
Dr. Meggitt was the first who suggested the algorithms similar to
CORDIC,
but using normalised constants and normalised variables reducible to
zero.
It allowed him to improve significantly the accuracy of the iterative
al-
gorithms.
In addition relative errors of the fixed-point representation numbers in
Meggitt's algorithms in contrast with Volder's algorithms practicaly
don't depend on the word size, like in the floating-point number
representation.
In other words, Dr.Meggitt suggested not only "pseudodivision and
pseudo-
multiplication processes" (as indicated in the title of his paper), but
also
"pseudofloating- point number representation" for CORDIC method.
You can find the Meggitt*s algorithms and results of its errors in
http://baykov.de/CORDIC1972.htm
Vladimir Baykov
Hallo und vielen Dank, ich habe das mal probiert. Der Winkel ist vom
Vorzeichen falsch. Ausserdem werden falsche Ergebnisse berechnet wenn x
und y in die Nähe von 0x3fffffff kommen. Ausserdem wäre es noch
wünschenswert gleich die Hypotenuse mit zu bekommen. Folgende Vorschläge
zum Code deshalb von mir:
Hallo,
das Vorzeichen habe ich nie ausprobiert. Danke.
Die Idee mit der Hypothenuse ist gut. Zum Testen des codes habe ich das
ganze eigentlich in Java geschrieben. Ich habe Deinen Code mit
reingebaut.
Vielen Dank für Deine Mühe
Oliver