CORDIC ( coordinate rotation digital computerの略)は、三角関数、双曲線関数、平方根、乗算、除算、指数関数、および任意の底を持つ対数を計算するためのシンプルで効率的なアルゴリズムであり、通常、1回の反復で1桁(または1ビット)ずつ収束します。したがって、CORDICは桁ごとのアルゴリズムの一例です。元のシステムは、 Volderのアルゴリズムと呼ばれることもあります。
CORDIC および擬似乗算、擬似除算、または因数結合として知られる密接に関連する手法は、ハードウェア乗算器が利用できない場合 (たとえば、単純なマイクロコントローラやフィールドプログラマブルゲートアレイ(FPGA) など)によく使用されます。これは、これらの手法に必要な演算が加算、減算、ビットシフト、ルックアップテーブルのみであるためです。そのため、これらはすべてシフト加算アルゴリズムのクラスに属します。コンピュータサイエンスでは、コストやスペースの理由で対象プラットフォームに乗算用のハードウェアがない場合、浮動小数点演算を実装するために CORDIC がよく使用されます。これは、 MOS 6502やZilog Z80などのプロセッサをベースとした初期のマイクロコンピュータのほとんどに当てはまりました。
長年にわたり、この概念のさまざまなバリエーションが登場しました。これには、円形 CORDIC ( Jack E. Volder ) [ 1 ] [ 2 ] 、線形 CORDIC、双曲型 CORDIC (John Stephen Walther) [ 3 ] [ 4 ]、および一般化双曲型 CORDIC ( GH CORDIC ) (Yuanyong Luo ら) [ 5 ] [ 6 ] が含まれます。
大まかに言うと、基本的なCORDICアルゴリズムは、ベクトルに一連のスケーリングされた回転を適用するものです。スケール係数と回転角度は事前に分かっており、各回転の方向のみが入力に依存します。回転モードでは、目標回転角度が入力として与えられ、累積回転角度が目標に近づくように回転方向が選択されます。出力は最終的なベクトルです。ベクトル化モードでは、ベクトルが入力として与えられ、ベクトルのy座標が0に近づくように回転方向が選択されます。出力は合計回転角度です。詳細については、「動作モード」を参照してください。
拡大縮小率と回転角度は、拡大縮小後の回転を加算、減算、ビットシフトのみで計算できるように選択されます。角度は、事前に計算された表から参照されます。
同様の数学的手法は、1624年にヘンリー・ブリッグス[ 7 ] [ 8 ]によって、また 1771年にロバート・フラワー[ 9 ]によって発表されたが、CORDICは低複雑度有限状態CPU向けに最適化されている。
CORDICは1956年にコンベア社の航空電子機器部門のジャック・E・ヴォルダーによって考案されました[ 10 ] [ 11 ] 。これは、 B-58爆撃機の航法コンピュータのアナログレゾルバを、より正確で高速なリアルタイムデジタルソリューションに置き換える必要性から生まれたものです[ 11 ]。そのため、CORDICはデジタルレゾルバと呼ばれることもあります[ 12 ] [ 13 ]。
ヴォルダーの研究は、1946年版のCRC化学物理ハンドブックの式に触発されたものである。[ 11 ]
どこは、、 そして。
彼の研究は、正弦関数と余弦関数を解くための CORDIC アルゴリズムとそれを実装するプロトタイプ コンピュータを提案する社内技術レポートにつながった。[ 10 ] [ 11 ]このレポートでは、修正された CORDIC アルゴリズムを使用して双曲座標回転、対数、指数関数を計算する可能性についても議論された。 [ 10 ] [ 11 ]この時期には、乗算と除算に CORDIC を利用することも考えられた。 [ 11 ] CORDIC の原理に基づいて、Convair で Volder の同僚であった Dan H. Daggett は、バイナリとバイナリ コード 10 進数(BCD) 間の変換アルゴリズムを開発した。[ 11 ] [ 14 ]
1958年、コンベア社はついにレーダー測位の問題を解決するための実証システムCORDIC Iの構築を開始し、すでに同社を去っていたヴォルダー抜きで1960年に完成させた。[ 1 ] [ 11 ]より汎用的なCORDIC IIモデルA (固定式) とB (空中式) は、1962年にダゲットとハリー・シュスによって構築され、テストされた。[ 11 ] [ 15 ]
Volder の CORDIC アルゴリズムは 1959 年に初めて公表され、[ 1 ] [ 2 ] [ 11 ] [ 13 ] [ 16 ] Martin-Orlando、Computer Control、Litton、Kearfott、Lear-Siegler、Sperry、Raytheon、Collins Radioなどの企業によって航法コンピュータに組み込まれるようになりました。[ 11 ]
ヴォルダーはマルコム・マクミランと組んで、自身のバイナリ CORDIC アルゴリズムを利用した固定小数点デスクトップ計算機 Athena を開発した。[ 17 ]この設計は1965年6 月にヒューレット・パッカードに提案されたが、採用されなかった。[ 17 ]それでもマクミランは、デビッド S. コックラン(HP) にヴォルダーのアルゴリズムを紹介し、コックランが後にヴォルダーと会った際に、ジョン E. メギット(IBM [ 18 ] ) が1961 年に擬似乗算と擬似除算として提案した同様のアプローチを彼に紹介した。 [ 18 ] [ 19 ]メギットの方法では、ヴォルダーの CORDIC がこれまで使用してきた基数 2ではなく基数 10 [ 18 ]の使用も提案されていた。これらの取り組みにより、1966年にヒューレット・パッカード社内で、10進数CORDICプロトタイプマシンのROM可能なロジック実装が実現しました。 [ 20 ] [ 19 ]これは、トーマス・E・オズボーンが1964年12月にDTLロジックで完成させた4機能浮動小数点デスクトップ計算機であるプロトタイプ「グリーンマシン」から概念的に派生したものです。 [ 17 ] [ 21 ]このプロジェクトにより、1968年3月にヒューレット・パッカード初の科学機能搭載デスクトップ計算機HP 9100Aが一般公開され、同年後半に量産が開始されました。[ 17 ] [ 21 ] [ 22 ] [ 23 ]
王研究所は、HP 9100Aが、以前のLOCI-1 [ 24 ] (1964 年 9 月) およびLOCI-2 (1965 年 1 月) [ 25 ] [ 26 ]対数計算機器デスクトップ電卓 [ 27 ] で使用されていた因子結合方式と同様のアプローチを使用していることを発見し、1968年にヒューレット・パッカード社をAn Wangの特許の 1 つを侵害したとして訴えたが、失敗に終わった。 [ 19 ] [ 28 ] [ 29 ] [ 30 ]
ヒューレット・パッカードのジョン・スティーブン・ウォルターは、1971年にこのアルゴリズムを統一CORDICアルゴリズムに一般化し、双曲線関数、自然指数、自然対数、乗算、除算、平方根を計算できるようにした。[ 31 ] [ 3 ] [ 4 ] [ 32 ]三角関数と双曲線関数のCORDICサブルーチンは、そのコードの大部分を共有できた。[ 28 ]この開発により、 1972年に最初の科学用携帯計算機であるHP -35が誕生した。 [ 28 ] [ 33 ] [ 34 ] [ 35 ] [ 36 ] [ 37 ]双曲線CORDICに基づいて、Yuanyong Luoらは、さらに、2019年に任意の固定底で対数と指数を直接計算する一般化双曲型CORDIC(GH CORDIC)が提案されました。 [ 5 ] [ 6 ] [ 38 ] [ 39 ] [ 40 ]理論的には、双曲型CORDICはGH CORDICの特殊なケースです。[ 5 ]
CORDIC は当初、バイナリ数字システムのみを使用して実装されていましたが、メギットが擬似乗算アプローチに十進システムの使用を提案したにもかかわらず、十進 CORDIC はその後数年間ほとんど知られることなく、ヘルマン シュミットとアンソニー ボガッキが 1973 年になってもまだ新しいものとして提案していました[ 16 ] [ 13 ] [ 41 ] [ 42 ] [ 43 ]。そして、ヒューレット パッカードがすでに 1966 年にそれを実装していたことが後に判明しました。[ 11 ] [ 13 ] [ 20 ] [ 28 ]
10進数CORDICはポケット電卓で広く使われるようになったが、[ 13 ]そのほとんどは2進数ではなく2進符号化10進数(BCD)で動作する。この入出力フォーマットの変更はCORDICのコアとなる計算アルゴリズムには影響を与えなかった。CORDICは、低コスト(つまりチップゲート数の少なさ)が速度よりもはるかに重要な携帯型電卓に特に適している。
CORDICは、ARMベースのSTM32G4、Intel 8087、[ 43 ] [ 44 ] [ 45 ] [ 46 ] [ 47 ] 80287、 [47] [ 48 ] 80387 [ 47 ] [ 48 ]から80486 [ 43 ]コプロセッサシリーズ、およびMotorola 68881 [ 43 ] [ 44 ]と68882で、主にFPUサブシステムのゲート数(および複雑さ)を削減する方法として、いくつかの種類の浮動小数点命令に実装されています。
CORDICは、三角関数、双曲線関数、対数関数の計算、実数および複素数の乗算、除算、平方根の計算、線形システムの解法、固有値推定、特異値分解、QR分解など、さまざまな計算タスクに単純なシフト加算演算を使用します。その結果、CORDICは、一般的な科学技術計算に加えて、信号処理や画像処理、通信システム、ロボット工学、3Dグラフィックスなどのさまざまな分野のアプリケーションに使用されています。[ 49 ] [ 50 ]
このアルゴリズムは、アポロ計画の月面探査車の航法システムで、方位と距離、つまり月着陸船からの距離を計算するために使用されました。[ 51 ] [ 52 ] CORDICは1980年にIntel 8087数学コプロセッサを実装するために使用され、ハードウェア乗算を実装する必要がなくなりました。[ 53 ]
CORDICは、ハードウェア乗算器が利用できない場合(例えばマイクロコントローラの場合)、またはサポートする機能を実装するために必要なゲート数を最小限に抑える必要がある場合(例えばFPGAやASICの場合)に、一般的に他のアプローチよりも高速です。実際、CORDICはXilinxのVivadoなどのFPGA開発アプリケーションで標準のドロップインIPとして採用されていますが、べき級数実装はそうではありません。これは、CORDICが多くの異なる関数(汎用)を計算できるのに対し、べき級数実装を実行するように構成されたハードウェア乗算器は、設計された関数しか計算できないためです。
一方、ハードウェア乗算器が利用可能な場合(例えば、 DSPマイクロプロセッサ内)、テーブルルックアップ法やべき級数は一般的にCORDICよりも高速です。近年、CORDICアルゴリズムは、特にFPGA実装において、様々な生物医学アプリケーションで広く利用されています。
STM32G4 、STM32U5、STM32H5シリーズ、および一部のSTM32H7シリーズの MCU は、ヒューマンマシンインターフェースのグラフィックスやモータのフィールド指向制御など、さまざまなミックスドシグナルアプリケーションでの計算を高速化するために CORDIC モジュールを実装しています。 CORDIC は、べき級数近似ほど高速ではありませんが、ARM CMSIS や C 標準ライブラリによって提供されるような補間テーブルベースの実装よりも高速です。[ 54 ]ただし、提供される CORDIC モジュールは結果で 20 ビットの精度しか達成しないため、結果の精度はわずかに低下する可能性があります。たとえば、ARM 実装と比較したパフォーマンスの差のほとんどは、完全な浮動小数点精度 (24 ビット) を達成し、その精度に対して相対誤差を達成する可能性のある補間アルゴリズムのオーバーヘッドによるものです。[ 55 ]もう 1 つの利点は、CORDIC モジュールがコプロセッサであり、他の CPU タスクと並列に実行できることです。
テイラー級数を使用する際の問題点は、絶対誤差は小さいものの、相対誤差は良好な挙動を示さないことである。[ 56 ]ミニマックス最適化などの他の多項式近似法は、両方の種類の誤差を制御するために使用できる。
整数演算専用CPUを搭載した多くの旧型システムでは、IEEE浮動小数点ライブラリの一部として、CORDICが様々な程度で実装されていました。しかし、最新の汎用CPUのほとんどは、加算、減算、乗算、除算、正弦、余弦、平方根、log10、自然対数などの一般的な演算を行う浮動小数点レジスタを備えているため、ソフトウェアでCORDICを実装する必要性はほとんどありません。CORDICの使用を検討する必要があるのは、マイクロコントローラや、特別な安全性や時間制約のあるソフトウェアアプリケーションに限られます。
CORDICは、さまざまな関数を計算するために使用できます。この説明では、回転モードでCORDICを使用して角度の正弦と余弦を計算する方法を示します。ただし、目的の角度はラジアンで与えられ、固定小数点形式で表現されているものとします。角度の正弦または余弦を求めるには、そのためには、目的の角度に対応する単位円上の点のyまたはx座標を見つける必要があります。 CORDIC を使用する場合、まずベクトルから始めます。:

最初の反復では、このベクトルを反時計回りに45°回転させて、ベクトルを取得します。連続する反復処理では、目的の角度に達するまで、ベクトルをサイズを小さくするステップでいずれかの方向に回転させます。各ステップの角度はのために。
より厳密に言うと、各反復処理では回転が計算され、これはベクトルを乗算することによって実行されます。回転行列を用いて:
回転行列は次のように与えられる。
三角関数の恒等式を用いると:
コサイン因子を取り出すと次のようになります。
回転ベクトルの式そして、次のようになります。
どこそしては、角度を設定する各反復において、それでも、あらゆる可能な出力値に収束する級数が得られます。したがって、タンジェントとの乗算は、2のべき乗による除算に置き換えることができ、これはデジタルコンピュータのハードウェアではビットシフトを使用して効率的に行われます。すると、式は次のようになります。
その中で回転の方向を決定します。回転角度がポジティブであること、正であれば+1、そうでなければ-1となる。
コサインの代わりに、以下の三角関数の恒等式を使用できます。
各反復ごとにこの乗数を与える:
のその後、係数を反復プロセスから取り出し、スケーリング係数を用いて一度にすべて適用することができる。:
これは事前に計算され、テーブルに格納されるか、反復回数が固定されている場合は単一の定数として保存されます。この補正は、スケーリングによって事前に行うこともできます。したがって、乗算を節約できます。さらに、[ 43 ]
アルゴリズムの複雑さをさらに軽減できるようにするため。一部のアプリケーションでは、修正を回避する場合があります。全体として、処理能力の向上につながる: [ 57 ]
十分な回数の反復処理の後、ベクトルの角度は目的の角度に近づきます。ほとんどの場合、40回の反復(n = 40)で小数点以下第10位までの正確な結果が得られます。
残された唯一のタスクは、各反復で回転を時計回りにするか反時計回りにするかを決定することです(これは、各反復で角度がどれだけ回転したかを追跡し、それを目的の角度から差し引くことによって行われます。そして、目的の角度に近づけるために、 もしが正の場合は時計回り、それ以外の場合は負の場合は反時計回りになります。
値も事前に計算して保存しておく必要があります。小さな角度の場合は、次のように近似できます。テーブルのサイズを小さくする。
上の図からわかるように、角度の正弦はは最終ベクトルのy座標です一方、x座標はコサイン値です。
上述の回転モードアルゴリズムは、任意のベクトル(x軸に沿って配置された単位ベクトルだけでなく)を-90°から+90°の間の角度で回転させることができます。回転方向の決定は、肯定的か否定的か。
ベクトル化モードでは、アルゴリズムを少し変更する必要があります。x座標が正でy座標が任意のベクトルから始まります。連続する回転の目的は、ベクトルをx軸に回転させることです(したがってy座標をゼロにします)。各ステップで、 yの値によって回転の方向が決まります。最終値は、には回転の総角度が含まれます。xの最終値は、元のベクトルの大きさをKでスケーリングした値になります。したがって、ベクトル化モードの明らかな用途は、直交座標から極座標への変換です。
Java では Math クラスにscalb(double x, int scale)そのようなシフトを実行するメソッドがあり、[ 58 ] C にはldexp関数があり、[ 59 ] x86 クラスのプロセッサにはfscale浮動小数点演算があります。[ 60 ]
from math import atan2 , sqrt , sin , cos , radians反復回数= 16theta_table = [ atan2 ( 1 , 2 ** i ) for i in range ( ITERS )]def compute_K ( n ):""" n = ITERS の場合の K(n) を計算します。これはまた、 上記のITERSが固定されている場合は、明示的な定数として格納されます。 """k = 1.0for i in range ( n ):k *= 1 / sqrt ( 1 + 2 ** ( - 2 * i ))kを返すdef cordic ( alpha : float , n : int ) -> tuple [ float , float ]:assert n <= ITERSK_n = compute_K ( n )シータ= 0.0x = 1.0y = 0.0P2i = 1 # これは以下のループで 2**(-i) になりますtheta_table [: n ]のarc_tangentについて:σ = + 1 (θ < αの場合)、それ以外の場合は- 1θ += Σ *逆正接x 、y = x -シグマ* y * P2i 、シグマ* P2i * x + yP2i /= 2return x * K_n , y * K_nif __name__ == "__main__" :# -90°から+90°まで15°刻みで計算された正弦と余弦の表を出力します。# 利用可能な数学ルーチンと比較します。print ( " x sin(x) diff. sin cos(x) diff. cosine " )xの範囲( -90 , 91 , 15 )について:cos_x 、sin_x =コーディック(ラジアン( x ) 、ITERS )印刷(f " { x : +05.1f } ° { sin_x : +.8f } ( { sin_x - sin ( radians ( x )) : +.8f } ) { cos_x : +.8f } ( { cos_x - cos ( radians ( x )) : +.8f } )")$ python cordic.py x sin(x) diff. sine cos(x) diff.コサイン-90.0° -1.00000000 (+0.00000000) -0.00001759 (-0.00001759) -75.0° -0.96592181 (+0.00000402) +0.25883404 (+0.00001499) -60.0° -0.86601812 (+0.00000729) +0.50001262 (+0.00001262) -45.0° -0.70711776 (-0.00001098) +0.70709580 (-0.00001098) -30.0° -0.50001262 (-0.00001262) +0.86601812 (-0.00000729) -15.0° -0.25883404 (-0.00001499) +0.96592181 (-0.00000402) +00.0° +0.00001759 (+0.00001759) +1.00000000 (-0.00000000) +15.0° +0.25883404 (+0.00001499) +0.96592181 (-0.00000402) +30.0° +0.50001262 (+0.00001262) +0.86601812 (-0.00000729) +45.0° +0.70709580 (-0.00001098) +0.70711776 (+0.00001098) +60.0° +0.86601812 (-0.00000729) +0.50001262 (+0.00001262) +75.0° +0.96592181 (-0.00000402) +0.25883404 (+0.00001499) +90.0° +1.00000000 (-0.00000000) -0.00001759 (-0.00001759)CORDIC の実装に必要な論理ゲートの数は、シフトと加算の組み合わせを必要とするため、乗算器に必要な数とほぼ同程度です。乗算器ベースまたは CORDIC ベースの実装の選択は、コンテキストによって異なります。たとえば、実数部と虚数部 (直交座標) で表される 2 つの複素数の乗算には 4 つの乗算が必要ですが、極座標で表される複素数に対して単一の CORDIC で実現できます。特に、数値の大きさが重要でない場合 (複素ベクトルと単位円上のベクトルの乗算は実際には回転に相当します)。CORDIC は、デジタルダウンコンバータなどの通信回路でよく使用されます。
ウラジミール・バイコフの2つの論文[ 61 ] [ 62 ]では、アークサイン、アークコサイン、自然対数、指数関数、および双曲線関数の計算に二重反復法を使用することが提案されています。二重反復法は、反復ステップの値が毎回、つまり各反復で変化する古典的なCORDIC法とは異なり、反復ステップの値が2回繰り返され、1回の反復でのみ変化するという点にあります。同時に、iの値が変化しない場合、反復の符号(方向)、つまり+または-(時計回りまたは反時計回り)は、ゼロに減少する変数の符号に依存します。したがって、二重反復の次数指標の名称が現れました。一方、通常の反復処理では次のようになります。二重反復法は、有効な引数変化範囲全体にわたって、この手法の収束を保証します。
基数を持つ任意の位取り記数法に対する CORDIC 収束問題の一般化[ 63 ]は、正弦関数、余弦関数、逆正接関数については、i の各値 (i = 0 または 1 ~ n、ここで n は桁数) に対する反復、つまり結果の各桁に対する反復。自然対数、指数関数、双曲線正弦、余弦、逆正接の場合、各値に対して反復処理を行う必要があります。関数 arcsin と arccosin については、2 つの各数字桁、つまり各値に対して反復処理を行う必要があります。[ 63 ]
逆双曲線正弦関数と逆双曲線余弦関数の場合、反復回数は次のようになります。各つまり、結果の各桁についてです。
CORDICは、ヘンリー・ブリッグスの研究から派生した対数アルゴリズムや指数アルゴリズムと同様に、「シフト加算」アルゴリズムの一種です。多くの基本関数を計算するために使用できる別のシフト加算アルゴリズムとして、 BKMアルゴリズムがあります。これは、対数アルゴリズムと指数アルゴリズムを複素平面に一般化したものです。例えば、BKMは実数角の正弦と余弦を計算するために使用できます。(ラジアン単位)指数を計算することによってそれはBKMアルゴリズムはCORDICよりもやや複雑ですが、スケーリング係数( K)を必要としないという利点があります。
これまでCORDICはバイナリ形式でのみ実装されていることが知られていました。しかし、ここで示すように、このアルゴリズムは10進数システム用に簡単に変更できます。* […] *その間、ヒューレット・パッカードや他の電卓メーカーが科学計算機で10進数のCORDIC技術を採用していることがわかりました。
年; PhD、1958 年、
ケンブリッジ大学
。1955 年にケンブリッジで最初の
Smith 賞を受賞し、
エマニュエル カレッジ
の研究フェローに選出されました
。 […]
1958年に
ウィンチェスターのハーズリーにあるIBM英国研究所に入社
。誤り訂正符号
と小型マイクロプログラムコンピュータに興味を持つ。
(、)
私は南カリフォルニアまで飛んで、
Athena
マシンで超越関数を実装した Jack Volder と話をし、約 1 時間話しました。彼は、擬似除算、擬似乗算の一般化関数を入手した Meggitt の元の論文を私に紹介してくれました。 […] 私はかなりの文献調査を行い、非常に興味深い発見をいくつか得ました。 […] 私は、1624 年の
Henry Briggsによる常用対数の計算に関する論文を見つけましたが、興味深いことに、
Athena
で MacMillan と Volder が使用したのと同じ擬似除算/擬似乗算の方法を使用していました
。 […] 私たちは
Wang Labs
から
LOCI-2を
購入し
、Wang LabsのLOCI
IIが
平方根、対数、指数を計算するのに
同じアルゴリズム
を使用していることに気づきました。9100の発売後、法務部にWangから特許を侵害したという手紙が届きました。私はBriggsの文献をラテン語で引用して返信し、「これは
先行技術のように見えます」と書きました。
その後、
Wangから何の連絡もありませんでした。
()
HP 9100
電卓の開発中、私
は Tom Osborne が提案したアーキテクチャに適合するアルゴリズムの開発を担当しました。アルゴリズムの提案された方法論は Malcolm McMillan によるものでしたが、コアとなる計算を理解するためにかなりの量の読書を行いました […]
Wang Laboratories は
同様の計算方法を使用していましたが、私の調査では、彼らの特許に記載されている 1624 年の
先行技術を発見しました。 […] この研究により、ハードウェアの制約内で顧客のニーズに合うようにアルゴリズムを使用することで、
超越関数
の適応が可能になりました
。これは
HP-35
の開発中に非常に役立ちました。
[…]超越関数については
、べき
級数、
多項式展開
、
連分数
、
チェビシェフ多項式
などが検討されました。しかし、必要な乗算と除算の数が多いため、いずれも処理速度が遅すぎました。HP-35 の速度とプログラミング効率の要件に最も適した汎用アルゴリズムは、1624 年に
Henry Briggsが「
Arithmetica Logarithmica
」で初めて記述し
、後に Volder と Meggitt が記述した、反復的な擬似除算と擬似乗算の方法でした。これは、以前の HP デスクトップ電卓で使用されていたものと同じタイプのアルゴリズムです。[…] アルゴリズムの複雑さから、多段階プログラミングが必要になりました。つまり、電卓にはサブルーチン機能が必要でした。[…] Arc-Hyperbolic-Tan のような超越関数を生成するには、複数のレベルのサブルーチンが必要でした。[…] Chris Clare は後にこれを
アルゴリズム状態機械
(ASM) 手法として文書化しました。単純な正弦や余弦でさえ、正接ルーチンを使用してから三角関数の恒等式から正弦を計算していました。このような面倒な操作は、固有のプログラムとプログラムステップの数を最小限に抑えるために必要でした。[…] 算術命令セットは、10進超越関数計算機専用に設計されました。基本的な算術演算は、
作業用ストレージとして使用される3つのレジスタへのデータパスを持つ
10の補数加算器/減算器によって実行されます。
は 16 個の逆正接値、つまり 2
−nの逆正接が含まれています。また、14 個の対数値、つまり (1+2
−n
)の底 2 の対数も含まれています
。これらは珍しい値に見えるかもしれませんが、1958 年に発明された CORDIC と呼ばれる効率的なアルゴリズムで使用されます。