<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=CORDIC</id>
	<title>CORDIC - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=CORDIC"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=CORDIC&amp;action=history"/>
	<updated>2026-06-01T22:56:27Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=CORDIC&amp;diff=326150&amp;oldid=prev</id>
		<title>imported&gt;Müllt-Renner: /* Literatur */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=CORDIC&amp;diff=326150&amp;oldid=prev"/>
		<updated>2026-03-03T06:19:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Literatur&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;CORDIC-Algorithmus&amp;#039;&amp;#039;&amp;#039; ({{enS|&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Co&amp;#039;&amp;#039;&amp;#039;ordinate &amp;#039;&amp;#039;&amp;#039;R&amp;#039;&amp;#039;&amp;#039;otation &amp;#039;&amp;#039;&amp;#039;Di&amp;#039;&amp;#039;&amp;#039;gital &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;omputer&amp;#039;&amp;#039;}}) ist ein effizienter iterativer [[Algorithmus]], mit dessen Hilfe sich viele mathematische [[Funktion (Mathematik)|Funktionen]] implementieren lassen, wie [[trigonometrische Funktionen]], [[Exponentialfunktion]] und [[Logarithmus|Logarithmen]] sowie auch die einfache [[Multiplikation]] oder [[Division (Mathematik)|Division]].&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
In der Rechentechnik, vornehmlich in der [[digitale Signalverarbeitung|digitalen Signalverarbeitung]], benötigt man schnelle Verfahren für die Berechnung von bspw. [[Trigonometrische Funktion|trigonometrischen Funktionen]]. Herkömmliche [[Reihenentwicklung]]en wie die [[Taylorreihe]] zeigen oft nur mittelmäßige (d.&amp;amp;nbsp;h. langsame, oder gar von den Argumenten abhängige) [[Grenzwert (Folge)|Konvergenz]] und schlechte [[Stabilität (Numerik)|numerische Stabilität]]. Eine Reihenentwicklung besteht außerdem hauptsächlich aus einer Summe von Produkten, die nur aufwendig zu berechnen sind.&lt;br /&gt;
&lt;br /&gt;
=== Geschichtliche Entwicklung ===&lt;br /&gt;
Der CORDIC-[[Algorithmus]] wurde 1959 von Jack E. Volder präsentiert. In der ursprünglichen Version war es damit möglich, trigonometrische Funktionen wie Sinus, Cosinus und Tangens sowie die Multiplikation und Division von Zahlen allein durch die in digitalen Schaltungen einfach realisierbaren Additionen und Schiebeoperationen (engl. {{lang|en|&amp;#039;&amp;#039;shift-and-add operations&amp;#039;&amp;#039;}}) zu bilden. Schiebeoperationen zur Zahlenbasis 2 sind in digitalen Schaltungen sehr leicht durch entsprechende Verschaltung realisierbar.&lt;br /&gt;
&lt;br /&gt;
Volders Motivation war der Ersatz der üblichen und fehleranfälligen analogen [[Trägheitsnavigationssystem|Navigationsrechner]] in [[Convair B-58|Convair-B-58]]-Bombern durch digitale Rechner zur genauen Positionsbestimmung. Die Anforderung war die Positionsberechnung der mit [[Überschallgeschwindigkeit]] fliegenden Bomber in Echtzeit über einer vereinfacht als kugelförmig angenommenen Erdoberfläche.&lt;br /&gt;
&lt;br /&gt;
Mitte der 1960er Jahre wurde der CORDIC-Algorithmus auch in zivilen Anwendungen eingesetzt. Vorläufer der heutigen [[Taschenrechner]] wie der [[HP-9100A|Tischrechner 9100]] von [[Hewlett-Packard]] aus dem Jahr 1968 setzten ihn zur Berechnung der trigonometrischen Funktionen ein.&lt;br /&gt;
&lt;br /&gt;
Im Jahr 1971 wurde der CORDIC-Algorithmus von J.&amp;amp;nbsp;S. Walther auf die heute übliche Form erweitert und damit auch die effiziente Berechnung von [[Logarithmus|Logarithmen]], der [[Exponentialfunktion]] und der [[Quadratwurzel]] in digitalen Schaltungen möglich.&lt;br /&gt;
&lt;br /&gt;
=== Anwendungsbeispiele ===&lt;br /&gt;
[[Datei:CORDIC (Bit-Parallel, Unrolled, Circular Rotation).svg|mini|Digitalschaltung CORDIC]]&lt;br /&gt;
CORDIC-Algorithmen werden zur Berechnung der wichtigsten Elementarfunktionen in [[Mikrocontroller]]-Rechenwerken wie Taschenrechnern eingesetzt. So findet sich auch in arithmetischen [[x87]]-Koprozessoren von [[Intel]] der CORDIC-Algorithmus zur Berechnung mathematischer Operationen. Weitere Anwendungsbeispiele liegen in der Nachrichtenübertragung. Damit lassen sich beispielsweise effizient Betrag und Phase eines komplexen Signals bestimmen.&lt;br /&gt;
&lt;br /&gt;
Da [[Multiplizierer (Digitaltechnik)|Multiplizierwerke]] vor allem in digitalen Schaltungen umfangreich und damit teuer zu realisieren sind, wird CORDIC oft genau da eingesetzt, wo Multiplizierer nicht effizient verfügbar sind. Dies umfasst vor allem den Bereich der digitalen Schaltungstechniken wie [[FPGA]]s oder [[Anwendungsspezifische integrierte Schaltung|ASICs]].&lt;br /&gt;
&lt;br /&gt;
CORDIC ist zwar nicht der schnellste Algorithmus, wird aber wegen seiner Einfachheit und Vielseitigkeit oft eingesetzt.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
[[Datei:CORDIC-illustration.svg|mini|Illustration von CORDIC]]&lt;br /&gt;
CORDIC kann man im &amp;lt;math&amp;gt;\mathbb{R}^3&amp;lt;/math&amp;gt;, aber auch nur in der zweidimensionalen Ebene betrachten. Im Folgenden umfasst die Beschreibung den einfacheren, zweidimensionalen Fall.&lt;br /&gt;
&lt;br /&gt;
Dreht man ein Koordinatensystem um den Winkel &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt;, erscheint der Vektor &amp;lt;math&amp;gt;(1,\;0)^T&amp;lt;/math&amp;gt; um den Winkel &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; gedreht; sein Endpunkt liegt im neuen System bei &amp;lt;math&amp;gt;x=\cos\Theta&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;y=\sin\Theta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die [[Rotationsmatrix|Rotation]] um den Winkel &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; entspricht dem [[Matrix-Vektor-Produkt]]:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_n \\&lt;br /&gt;
    y_n&lt;br /&gt;
  \end{pmatrix} =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    \cos \Theta &amp;amp; -\sin \Theta \\&lt;br /&gt;
    \sin \Theta &amp;amp; \cos \Theta&lt;br /&gt;
  \end{pmatrix}\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 \\&lt;br /&gt;
    0&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
D.&amp;amp;nbsp;h., um auf den eigentlichen Funktionswert zu kommen, muss der Einheitsvektor &amp;lt;math&amp;gt;(1,\;0)^T&amp;lt;/math&amp;gt; um &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; gedreht werden. Dies lässt sich leichter bewerkstelligen, wenn innerhalb der Transformationsmatrix nur noch eine Abhängigkeit von &amp;#039;&amp;#039;einer&amp;#039;&amp;#039; Winkelfunktion, z.&amp;amp;nbsp;B. &amp;lt;math&amp;gt;\tan&amp;lt;/math&amp;gt; besteht:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_n \\&lt;br /&gt;
    y_n&lt;br /&gt;
  \end{pmatrix} = \cos \Theta \cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 &amp;amp; -\tan\Theta \\&lt;br /&gt;
    \tan\Theta &amp;amp; 1&lt;br /&gt;
  \end{pmatrix}\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 \\&lt;br /&gt;
    0&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Drehung um &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; wird trickreich realisiert als [[Linearkombination]] von Teildrehungen um geschickt gewählte Teilwinkel &amp;lt;math&amp;gt;\alpha_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
 \Theta = \sum_{i} \sigma_i\cdot\alpha_i \qquad \sigma_i \in \{-1,1\}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine zu weite Drehung im Schritt &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; wird kompensiert durch einen Vorzeichenwechsel &amp;lt;math&amp;gt;\sigma_{i+1}:=-\sigma_i&amp;lt;/math&amp;gt;. Das gezeigte Verfahren konvergiert und ist numerisch stabil für alle &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt;, die sich aus obiger Summe ergeben können. Man führt nun noch eine Hilfsvariable &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; ein, die für den Drehsinn Verantwortung trägt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
z_0 = \Theta \qquad\quad&lt;br /&gt;
z_i = z_{i-1}-\sigma_{i-1}\cdot\alpha_{i-1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
 \sigma_i = \begin{cases}-1 &amp;amp; \mbox{falls}\quad z_{i-1}\le 0\\ 1 &amp;amp; \mbox{sonst} \end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn nur einfachste Bauteile verwendet werden sollen und daher keine Multiplizierer vorhanden sind, muss man alles über Schiebe- und Addieroperationen bewerkstelligen. Dieses wird erreicht durch den Ansatz&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\tan\alpha_i = 2^{-i}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Man erhält damit den folgenden Algorithmus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_n \\&lt;br /&gt;
    y_n&lt;br /&gt;
  \end{pmatrix} = \prod_{i=0}^{n-1} \cos\alpha_i&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 &amp;amp; -\sigma_i 2^{-i} \\&lt;br /&gt;
    \sigma_i 2^{-i} &amp;amp; 1&lt;br /&gt;
  \end{pmatrix} \cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_0 \\&lt;br /&gt;
    y_0&lt;br /&gt;
  \end{pmatrix} = K\cdot\prod_{i=0}^{n-1}&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 &amp;amp; -\sigma_i 2^{-i} \\&lt;br /&gt;
    \sigma_i 2^{-i} &amp;amp; 1&lt;br /&gt;
  \end{pmatrix} \cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_0 \\&lt;br /&gt;
    y_0&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mit dem Skalierungsfaktor &amp;lt;math&amp;gt; K = \prod_{i=0}^{n-1} \cos\alpha_i \approx &amp;lt;/math&amp;gt; 0,60725... für &amp;lt;math&amp;gt; n \to\infty &amp;lt;/math&amp;gt;, der während der Initialisierungsphase implizit berechnet wird.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
x_{i+1} \,:=\, x_i - \sigma_i 2^{-i}y_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y_{i+1} \,:=\, y_i + \sigma_i 2^{-i}x_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
z_{i+1} \,:=\, z_i - \sigma_i \arctan 2^{-i}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Initialisierung ===&lt;br /&gt;
Vorweg wird eine Tabelle &amp;lt;math&amp;gt; T &amp;lt;/math&amp;gt; fester Länge &amp;lt;math&amp;gt; L &amp;lt;/math&amp;gt; angelegt mit &amp;lt;math&amp;gt; T_1=\pi/4 = \arctan\delta_1&amp;lt;/math&amp;gt;, wobei &amp;lt;math&amp;gt; \delta_1=1&amp;lt;/math&amp;gt; ist. Die folgenden Werte sind: &amp;lt;math&amp;gt; T_{j} = \arctan\delta_j&amp;lt;/math&amp;gt; mit &amp;lt;math&amp;gt;\delta_j=\delta_{j-1}/2&amp;lt;/math&amp;gt;. (Die Werte des Arcustangens lassen sich mit der hier gut konvergierenden Potenzreihenentwicklung bestimmen.)&lt;br /&gt;
&lt;br /&gt;
Die Länge &amp;lt;math&amp;gt; L &amp;lt;/math&amp;gt; der Tabelle bestimmt die erreichbare Genauigkeit. Führt man alle Drehungen eines Einheitsvektors &amp;lt;math&amp;gt; (0,\;1)^T &amp;lt;/math&amp;gt; mit den so berechneten Werten hintereinander in gleichem Drehsinn aus, erzielt man eine Gesamtdrehung von etwas mehr als &amp;lt;math&amp;gt;\pm \pi / 2 &amp;lt;/math&amp;gt;. Der Skalenfaktor &amp;lt;math&amp;gt; K &amp;lt;/math&amp;gt; wird mit einem Aufruf im Vektormodus (s.&amp;amp;nbsp;u.) berechnet, indem man die Verlängerung des Einheitsvektors &amp;lt;math&amp;gt; (0,1)^T &amp;lt;/math&amp;gt; ohne Skalierung berechnet.&lt;br /&gt;
&lt;br /&gt;
=== Rotationsmodus ===&lt;br /&gt;
Der Ausgangsvektor &amp;lt;math&amp;gt;(1,0)^T&amp;lt;/math&amp;gt; wird in jedem der Schritte so gedreht, dass der Winkel &amp;lt;math&amp;gt;z = \Theta&amp;lt;/math&amp;gt; gegen Null geht. Es werden stets alle &amp;lt;math&amp;gt; L &amp;lt;/math&amp;gt; Teildrehungen ausgeführt, mit ggf. wechselndem [[Vorzeichen (Zahl)|Vorzeichen]]. Da der Kosinus eine gerade Funktion ist, spielt das Vorzeichen bei der Skalierung keine Rolle. Nach Reskalierung sind die Komponenten des erhaltenen Endvektors &amp;lt;math&amp;gt;\cos\Theta&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;\sin\Theta&amp;lt;/math&amp;gt;. Der [[Konvergenzbereich]] ergibt sich zu &amp;lt;math&amp;gt;-\sum_{i=0}^{n-1}\arctan2^{-i}\le \Theta \le+\sum_{i=0}^{n-1}\arctan2^{-i}&amp;lt;/math&amp;gt;, also bei genügend großem &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; etwa zu &amp;lt;math&amp;gt;-1{,}74\le \Theta \le+1{,}74&amp;lt;/math&amp;gt;, d.&amp;amp;nbsp;h., er erstreckt sich über mehr als den vierten und ersten Quadranten.&lt;br /&gt;
&lt;br /&gt;
=== Vektormodus ===&lt;br /&gt;
Der vorgegebene Vektor, dessen [[Polarkoordinaten]] gesucht werden, wird immer so gedreht, dass sich der Betrag seiner &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;-Komponente verringert. Die Drehwinkel &amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt; werden dabei vorzeichenrichtig addiert. Die &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-Komponente des Endvektors ist nach Reskalierung der Betrag des Ausgangsvektors. Dieser Modus wird auch benutzt zur Berechnung des Arcustangens aus zwei Argumenten, Start mit &amp;lt;math&amp;gt; c ( \cos \Theta, \sin \Theta)^T&amp;lt;/math&amp;gt;. Der Konvergenzbereich ist derselbe wie oben.&lt;br /&gt;
Aus &amp;lt;math&amp;gt;\operatorname{arctan2}(y_0,x_0)&amp;lt;/math&amp;gt; lassen sich die Funktionen &amp;lt;math&amp;gt;\arcsin y_0&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;\arccos x_0&amp;lt;/math&amp;gt; unter Zuhilfenahme von &amp;lt;math&amp;gt;x_0^2+y_0^2=1&amp;lt;/math&amp;gt; leicht ableiten.&lt;br /&gt;
&lt;br /&gt;
=== Bereich außerhalb von ±π/2 ===&lt;br /&gt;
&amp;lt;!-- Das TeX in der Überschrift sollte durch die entsprechenden Unicode-Zeichen ersetzt werden! --&amp;gt;&lt;br /&gt;
Der Startvektor &amp;lt;math&amp;gt; (0,1)^T &amp;lt;/math&amp;gt; bzw. &amp;lt;math&amp;gt;(0,-1)^T &amp;lt;/math&amp;gt; entspricht einer Vorwegdrehung von &amp;lt;math&amp;gt; \pi / 2 &amp;lt;/math&amp;gt; bzw. &amp;lt;math&amp;gt; -\pi/2 &amp;lt;/math&amp;gt; (für den Rotationsmodus). Bei einem Startvektor mit negativer &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-Komponente im Vektormodus bewirkt man entsprechende Drehungen durch Vertauschen der Komponenten und Änderungen der Vorzeichen.&lt;br /&gt;
&lt;br /&gt;
== Verallgemeinerung ==&lt;br /&gt;
Die oben benutzten Iterationsformeln&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_i \\  y_i&lt;br /&gt;
  \end{pmatrix} = \cos \Theta \cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 &amp;amp; -\tan\Theta \\   \tan\Theta &amp;amp; 1&lt;br /&gt;
  \end{pmatrix}\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_{i-1} \\  y_{i-1}&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
sind ein Sonderfall der allgemeineren Vorschrift&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_i \\ y_i \\ z_i&lt;br /&gt;
  \end{pmatrix} = k_i\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 &amp;amp; -m\sigma_i \delta_i&amp;amp; 0 &amp;amp; 0\\&lt;br /&gt;
    \sigma_i \delta_i&amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
    0 &amp;amp; 0 &amp;amp; 1 &amp;amp;-\sigma_i t_i&lt;br /&gt;
  \end{pmatrix}\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_{i-1}\\  y_{i-1}\\ z_{i-1} \\1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
mit &amp;lt;math&amp;gt; m=1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt; \delta_i=2^{-i}&amp;lt;/math&amp;gt; sowie &amp;lt;math&amp;gt; t_i=\arctan\delta_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Lineare Modi ===&lt;br /&gt;
Für &amp;lt;math&amp;gt; m=0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\delta_i=t_i=[1,1/2, 1/4, 1/8, \dotsc]&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;k=1&amp;lt;/math&amp;gt; erhält man&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_i \\ y_i \\ z_i&lt;br /&gt;
  \end{pmatrix} =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 &amp;amp; 0 &amp;amp; 0 &amp;amp;0\\&lt;br /&gt;
    \sigma_i \delta_i &amp;amp; 1 &amp;amp; 0 &amp;amp;0\\&lt;br /&gt;
    0 &amp;amp; 0 &amp;amp; 1 &amp;amp;-\sigma_i \delta_i&lt;br /&gt;
  \end{pmatrix}\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_{i-1}\\  y_{i-1}\\ z_{i-1}\\1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
womit sich Multiplikation und Division durchführen lassen. Eine Tabelle &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; erübrigt sich hier.&lt;br /&gt;
&lt;br /&gt;
;Multiplikation:&lt;br /&gt;
&amp;lt;math&amp;gt;x_0=a&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z_0=b&amp;lt;/math&amp;gt; ergibt im Rotationsmodus (&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; gegen 0) &amp;lt;math&amp;gt;y_n=y_0+a\cdot b&amp;lt;/math&amp;gt; für alle &amp;lt;math&amp;gt;-2&amp;lt;b&amp;lt;2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Division:&lt;br /&gt;
&amp;lt;math&amp;gt;x_0=b&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y_0=a&amp;lt;/math&amp;gt; ergibt im Vektormodus (&amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; gegen 0) &amp;lt;math&amp;gt;z_n=z_0+a/b&amp;lt;/math&amp;gt; für alle &amp;lt;math&amp;gt;-2&amp;lt;a/b&amp;lt;2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Hyperbolische Modi ===&lt;br /&gt;
Mit &amp;lt;math&amp;gt;m=-1&amp;lt;/math&amp;gt; werden die Hyperbelfunktionen, ihre Umkehrungen ([[Areafunktion]]en), Exponentialfunktion und Logarithmus sowie die Quadratwurzel berechenbar. [[Einheitskreis]] bzw. -hyperbel werden durch &amp;lt;math&amp;gt;\sqrt{x^2+my^2}=1&amp;lt;/math&amp;gt; mit &amp;lt;math&amp;gt;m=+1&amp;lt;/math&amp;gt; bzw. &amp;lt;math&amp;gt;m=-1&amp;lt;/math&amp;gt; beschrieben. Das zu einem Vektor &amp;lt;math&amp;gt;(x,y)^T&amp;lt;/math&amp;gt; gehörende Winkel- bzw. Areaargument ist durch &amp;lt;math&amp;gt;\Theta= \arctan (\sqrt{m}\cdot y/x)/\sqrt{m}&amp;lt;/math&amp;gt; gegeben, also&lt;br /&gt;
:&amp;lt;math&amp;gt;m=1&amp;lt;/math&amp;gt;, Winkelfunktionen (s.o): &amp;lt;math&amp;gt;\Theta=\arctan(y/x)&amp;lt;/math&amp;gt; und&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m=-1&amp;lt;/math&amp;gt;, hyperbolische Fkt.:&lt;br /&gt;
:&amp;lt;math&amp;gt;\Theta=\arctan(iy/x)/i&amp;lt;/math&amp;gt;&lt;br /&gt;
, hier &amp;lt;math&amp;gt;i^2=-1&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;i \Theta= \arctan(i y/x)&amp;lt;/math&amp;gt;; und wegen &amp;lt;math&amp;gt;\operatorname{tanh}\alpha=-i \tan(i\alpha)&amp;lt;/math&amp;gt; auch &amp;lt;math&amp;gt;\Theta=\operatorname{Atanh}(y/x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das Verfahren ist analog zu dem eingangs gezeigten für die Winkelfunktionen. Erforderlich sind nur eine weitere Tabelle mit &amp;lt;math&amp;gt;t_i=\operatorname{Atanh}\delta_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\delta_i= [1/2, 1/4, 1/8, \dotsc]&amp;lt;/math&amp;gt; und die einmalige Berechnung des Skalenfaktors &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_i \\ y_i \\ z_i&lt;br /&gt;
  \end{pmatrix} = k_i\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    1 &amp;amp; \sigma_i \delta_i&amp;amp; 0 &amp;amp; 0\\&lt;br /&gt;
    \sigma_i \delta_i&amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
    0 &amp;amp; 0 &amp;amp; 1 &amp;amp;-\sigma_i t_i&lt;br /&gt;
  \end{pmatrix}\cdot&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    x_{i-1}\\  y_{i-1}\\ z_{i-1} \\1&lt;br /&gt;
  \end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Iterationen &amp;lt;math&amp;gt;i= 4, 13, 40, k, 3k+1&amp;lt;/math&amp;gt; müssen immer wiederholt werden, da der [[Areatangens hyperbolicus]] nicht die Bedingung &amp;lt;math&amp;gt;t_{i+1} \le \tfrac{1}{2} t_i&amp;lt;/math&amp;gt; erfüllt, das somit für die Reihe &amp;lt;math&amp;gt;\sum\sigma_i t_i&amp;lt;/math&amp;gt; nicht konvergieren würde.&lt;br /&gt;
&lt;br /&gt;
Rotation mit &amp;lt;math&amp;gt;[x_0, y_0]=[1, 0]&amp;lt;/math&amp;gt; liefert:&lt;br /&gt;
_&amp;lt;math&amp;gt;x_n=\operatorname{cosh}z_0,\quad y_n=\operatorname{sinh} z_0&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
davon abgeleitet:&lt;br /&gt;
:&amp;lt;math&amp;gt;\operatorname{tanh}z=\operatorname{sinh}z/\operatorname{cosh}z&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;e^z=\operatorname{cosh}z+\operatorname{sinh}z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vektormodus mit &amp;lt;math&amp;gt;z_0=0&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
: &amp;lt;math&amp;gt;z_n=\operatorname{Atanh}(y_0/x_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
und den hyperbolischen Betrag&lt;br /&gt;
:&amp;lt;math&amp;gt;x_n=\sqrt{x_0^2-y_0^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
davon abgeleitet:&lt;br /&gt;
:&amp;lt;math&amp;gt;\ln w=2\operatorname{Atanh}\frac{w-1}{w+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
sowie&lt;br /&gt;
:&amp;lt;math&amp;gt;\sqrt{w}&amp;lt;/math&amp;gt;&lt;br /&gt;
aus dem Betrag des Startvektors &amp;lt;math&amp;gt;[w+1/4, w-1/4]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Konvergenzbereich ist in beiden Modi beschränkt durch die maximal mögliche Änderung von &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. Alle mathematisch erlaubten Argumente können jedoch durch einfache Umstellungen und Shift-Operationen auf ihn abgebildet werden.&lt;br /&gt;
&lt;br /&gt;
== Alternativen ==&lt;br /&gt;
Als Alternativen kommen hauptsächlich schnelle [[Lookup-Tabelle|Lookuptable]]-Verfahren in Frage, wie in [[Digitaler Signalprozessor|DSPs]], und [[Bitalgorithmen]], die mit einem ähnlichen Ansatz wie CORDIC die Berechnung vornehmen.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Jack E. Volder: &amp;#039;&amp;#039;The CORDIC Trigonometric Computing Technique.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;IRE Transactions on Electronic Computers&amp;#039;&amp;#039;. September 1959.&lt;br /&gt;
* D. H. Daggett: &amp;#039;&amp;#039;Decimal-Binary conversions in CORDIC.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;IRE Transactions on Electronic Computers.&amp;#039;&amp;#039; Vol. EC-8 #5, pp 335–339, IRE, September 1959.&lt;br /&gt;
* J. E. Meggitt, &amp;#039;&amp;#039;Pseudo Division and Pseudo Multiplication Processes&amp;#039;&amp;#039;. In: &amp;#039;&amp;#039;IBM Journal.&amp;#039;&amp;#039; April 1962.&lt;br /&gt;
* [http://baykov.de/cordic1972.htm Vladimir Baykov: &amp;#039;&amp;#039;Problems of Elementary Functions Evaluation Based on Digit by Digit (CORDIC) Technique&amp;#039;&amp;#039;. PhD thesis, Leningrad State Univ. of Electrical Eng., 1972.]&lt;br /&gt;
* [http://baykov.de/cordic1975.htm V. D. Baykov, V. B. Smolov: &amp;#039;&amp;#039;Hardware implementation of elementary functions in computers&amp;#039;&amp;#039;. Leningrad State University, 1975, 96p.]&lt;br /&gt;
* V. D. Baykov, S. A. Seljutin: &amp;#039;&amp;#039;Elementary functions evaluation in microcalculators&amp;#039;&amp;#039;. Radio &amp;amp; svjaz, Moscow 1982, 64p.&lt;br /&gt;
*[http://baykov.de/cordic1985.htm Vladimir D. Baykov, Vladimir B. Smolov: &amp;#039;&amp;#039;Special-purpose processors: iterative algorithms and structures.&amp;#039;&amp;#039; Radio &amp;amp; svjaz, Moscow 1985, 288 pages.]&lt;br /&gt;
* M. E. Frerking: &amp;#039;&amp;#039;Digital Signal Processing in Communication Systems.&amp;#039;&amp;#039; 1994.&lt;br /&gt;
* Jean-Michel Muller: &amp;#039;&amp;#039;Elementary Functions&amp;#039;&amp;#039;. Verlag Birkhäuser, 2006, ISBN 0-8176-4372-9.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://cordic-bibliography.blogspot.de/p/what-is-cordic.html CORDIC Bibliography Site]&lt;br /&gt;
* http://www.andraka.com/cordic.php&lt;br /&gt;
* [http://www.emesys.com/BS2mathC.htm BASIC Stamp II math note #C]&lt;br /&gt;
* [https://opencores.org/project,cordic VHDL-Implementierung des CORDIC-Algorithmus auf Opencores.org]&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Cordic}}&lt;br /&gt;
[[Kategorie:Algorithmus]]&lt;br /&gt;
[[Kategorie:Computerarithmetik]]&lt;br /&gt;
[[Kategorie:Digitale Signalverarbeitung]]&lt;br /&gt;
[[Kategorie:Abkürzung|CORDIC]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Müllt-Renner</name></author>
	</entry>
</feed>