JP2504102B2 - 逆三角関数演算装置 - Google Patents
逆三角関数演算装置Info
- Publication number
- JP2504102B2 JP2504102B2 JP63035901A JP3590188A JP2504102B2 JP 2504102 B2 JP2504102 B2 JP 2504102B2 JP 63035901 A JP63035901 A JP 63035901A JP 3590188 A JP3590188 A JP 3590188A JP 2504102 B2 JP2504102 B2 JP 2504102B2
- Authority
- JP
- Japan
- Prior art keywords
- register
- adder
- subtractor
- input
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5446—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation using crossaddition algorithms, e.g. CORDIC
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
〔産業上の利用分野〕 本発明は、計算機における逆三角関数の演算装置に関
するものである。 〔従来の技術〕 逆三角関数は、科学技術計算を取り扱う計算機にとっ
て、ぜひとも備えなければならない機能の一つである。 この関数を演算する方式としてはテイラー級数展開 arctan x=x−x3/3+x5/5−x7/7 ……(1) や、連分数展開やチェビシェフ級数展開などによる有理
関数近似によって求める方式がある。しかし、いずれの
方式も、多くの乗算あるいは除算を必要とするため演算
時間が長くなり、しかも演算精度も満足すべきものが得
られないという欠点があった。 また、マイクロプログラム制御の計算機に適した逆三
角関数演算方式としてCORDIC(Cordinate Rotation Dig
ital Conputer)がある。CORDICは、加算,減算及び右
シフトによって演算できるため、高速な乗算器を持たな
い計算機では有効である。 2進法でn桁の精度で逆三角関数arctan(y/x)を求
めるためのCORDICの演算原理を以下に示す。 角度θは定数γkと数列{ak}を用いると、以下のよ
うに表わせる。 θ=a0×γ0+a1×γ1+a2×γ2 +…+an-1×γn-1+ε (2) ただし、 γk=arctan(2-k) (3) ak={+1,−1} (4) このとき、xとyから{ak}を求めることを疑似除
算、{ak}からθを求めることを疑似乗算という。 {ak}を求めるためには、 x=R×cosθ y=R×sinθ R=x2+y2 として、加法定理を利用する。 cos(φk)≧ならば、 ak=+1 (5) φk+1=φk+γk (6) cos(φk+1)=R′k(cosφk−2-k×sinφk)
(7) sin(φk+1)=R′k(sinφ+2-k×cosφk) (8) cos(φk)<0ならば、 ak=−1 (9) φk+1=φ1−γk (10) cos(φk+1)=R′k(cosφk+2-k×sinφk) (11) sin(φk+1)=R′k(sinφk−2-k×cosφk) (12) ここで、R′k=1/Rkとする。 (13) これらを繰り返し実行することで、cos(φk)を0
に近づけてゆき、arctan(y/x)を求める。 このとき、式(7),(8),(11),(12)は、
{ak}を決定するための疑似除算である。また、式
(6),(10)は、{ak}からθを求めるための疑似乗
算である。 CORDICの算法は以下のとりである。
するものである。 〔従来の技術〕 逆三角関数は、科学技術計算を取り扱う計算機にとっ
て、ぜひとも備えなければならない機能の一つである。 この関数を演算する方式としてはテイラー級数展開 arctan x=x−x3/3+x5/5−x7/7 ……(1) や、連分数展開やチェビシェフ級数展開などによる有理
関数近似によって求める方式がある。しかし、いずれの
方式も、多くの乗算あるいは除算を必要とするため演算
時間が長くなり、しかも演算精度も満足すべきものが得
られないという欠点があった。 また、マイクロプログラム制御の計算機に適した逆三
角関数演算方式としてCORDIC(Cordinate Rotation Dig
ital Conputer)がある。CORDICは、加算,減算及び右
シフトによって演算できるため、高速な乗算器を持たな
い計算機では有効である。 2進法でn桁の精度で逆三角関数arctan(y/x)を求
めるためのCORDICの演算原理を以下に示す。 角度θは定数γkと数列{ak}を用いると、以下のよ
うに表わせる。 θ=a0×γ0+a1×γ1+a2×γ2 +…+an-1×γn-1+ε (2) ただし、 γk=arctan(2-k) (3) ak={+1,−1} (4) このとき、xとyから{ak}を求めることを疑似除
算、{ak}からθを求めることを疑似乗算という。 {ak}を求めるためには、 x=R×cosθ y=R×sinθ R=x2+y2 として、加法定理を利用する。 cos(φk)≧ならば、 ak=+1 (5) φk+1=φk+γk (6) cos(φk+1)=R′k(cosφk−2-k×sinφk)
(7) sin(φk+1)=R′k(sinφ+2-k×cosφk) (8) cos(φk)<0ならば、 ak=−1 (9) φk+1=φ1−γk (10) cos(φk+1)=R′k(cosφk+2-k×sinφk) (11) sin(φk+1)=R′k(sinφk−2-k×cosφk) (12) ここで、R′k=1/Rkとする。 (13) これらを繰り返し実行することで、cos(φk)を0
に近づけてゆき、arctan(y/x)を求める。 このとき、式(7),(8),(11),(12)は、
{ak}を決定するための疑似除算である。また、式
(6),(10)は、{ak}からθを求めるための疑似乗
算である。 CORDICの算法は以下のとりである。
【1】 x0=x,y0=y,v0=0(0≦y<x<∞)を初期
値とする。
値とする。
【2】 k=0,1,2,……,n−1に対して
【3】を反復す
る。
る。
【3】 yk≧0ならばak=+1 yk<0ならばak=−1として以下の演算を行う。 xk+1=Xk+ak×2-k×yk (14) yk+1=yk−ak×2-k×Xk (15) vk+1=vk+ak×γk (16) ただし、γkは(3)式を満たす定数である。
【4】 θ=arctan(y/x)=vnが得られる。 従来のCORDICの算法は、第4図のフローチャートを示
す手順で行われる。 そのために、第2図のように2個のバレル・シフタ、
3個の加減算器を有する演算装置を用いている。 第2図において、レジスタ211,221,231は3種の2進
数の変数yk,xk,vk,を格納するレジスタ、バレル・シフ
タ213,223はレジスタ221,211の内容を任意桁だけ右シフ
トできるバレル・シフタ、ROM204は(3)式の定数γk
を発生するn語のROM、加減算器212,222,232はそれぞれ
レジスタ211とバレル・シフタ213、レジスタ221とバレ
ル・シフタ223、レジスタレジスタ231とROM204のそれぞ
れの内容を、加算または減算する加減算器である。カウ
ンタ205は、バレル・シフタ213,223のシフト桁数kを指
定し、ROM204の定数番号kを指定するカウンタである。 次に、第2図の動作を第3図の従来のCORDICの算法に
基づいて説明する。
す手順で行われる。 そのために、第2図のように2個のバレル・シフタ、
3個の加減算器を有する演算装置を用いている。 第2図において、レジスタ211,221,231は3種の2進
数の変数yk,xk,vk,を格納するレジスタ、バレル・シフ
タ213,223はレジスタ221,211の内容を任意桁だけ右シフ
トできるバレル・シフタ、ROM204は(3)式の定数γk
を発生するn語のROM、加減算器212,222,232はそれぞれ
レジスタ211とバレル・シフタ213、レジスタ221とバレ
ル・シフタ223、レジスタレジスタ231とROM204のそれぞ
れの内容を、加算または減算する加減算器である。カウ
ンタ205は、バレル・シフタ213,223のシフト桁数kを指
定し、ROM204の定数番号kを指定するカウンタである。 次に、第2図の動作を第3図の従来のCORDICの算法に
基づいて説明する。
【1】 レジスタ211,221,231にy(402),x(401),0
(403)を初期値として与える。
(403)を初期値として与える。
【2】 カウンタ205の値が0からn−1までのnステ
ップの間、次のステップ
ップの間、次のステップ
【3】を繰り返す(409)。
【3】 レジスタ21には(15)式の変数ykが、レジスタ
221には(14)式の変数xkが、レジスタ231には(16)式
の変数vkが、カウンタ205には変数kが、格納されてい
る。バレル・シフタ213,223はそれぞれレジスタ221,211
の値を、カウンタ205が示す数だけ右シフトすることに
より、2-k倍する。レジスタ211の符号桁の値が正のとき
ak=+1となり、加減算器212では減算(412)を加減算
器222,232では加算(411,413)を行う。レジスタ231の
符号桁の値が負のときak=−1となり、加減算器212で
は加算(422)を加減算器222,232では減算(421,423)
を行う。3個の加減算器212,222,232の出力は、変数y
k+1,xk+1,vk+1として、レジスタ211,221,231に格納され
る。
221には(14)式の変数xkが、レジスタ231には(16)式
の変数vkが、カウンタ205には変数kが、格納されてい
る。バレル・シフタ213,223はそれぞれレジスタ221,211
の値を、カウンタ205が示す数だけ右シフトすることに
より、2-k倍する。レジスタ211の符号桁の値が正のとき
ak=+1となり、加減算器212では減算(412)を加減算
器222,232では加算(411,413)を行う。レジスタ231の
符号桁の値が負のときak=−1となり、加減算器212で
は加算(422)を加減算器222,232では減算(421,423)
を行う。3個の加減算器212,222,232の出力は、変数y
k+1,xk+1,vk+1として、レジスタ211,221,231に格納され
る。
【4】 上記ステップをn回実行した後(409)、レジ
スタ231にvn=arctan(y/x)が得られる(410)。 このとき、上記ステップ
スタ231にvn=arctan(y/x)が得られる(410)。 このとき、上記ステップ
【3】の1回の処理に1クロ
ックかかるとすると、全体の演算処理には約nクロック
要する。 他の従来例では、第3図のように1個のバレル・シフ
タと1個の加減算器を用いてCORDICの算法を実現してい
る。 第3図において、レジスタ308,307,309は3種の2進
数の変数yk,xk,vkを格納するレジスタ、バレル・シフタ
303は値を任意桁だけ右シフトまたは左シフトできるバ
レル・シフタ、ROM302は(3)式の定数γkを発生する
n語のROM、加減算器304は入力Aの内容と入力Bの内容
を、加算または減算する加減算器である。カウンタ306
は、CORDICのループ回数を制御するカウンタで、カウン
タ301はバレル・シフタ303のシフト桁数を指定し、ROM3
02の定数番号kを指定するカウンタである。 次に、第3図の動作を第4図のCORDICの算法に基づい
て説明する。
ックかかるとすると、全体の演算処理には約nクロック
要する。 他の従来例では、第3図のように1個のバレル・シフ
タと1個の加減算器を用いてCORDICの算法を実現してい
る。 第3図において、レジスタ308,307,309は3種の2進
数の変数yk,xk,vkを格納するレジスタ、バレル・シフタ
303は値を任意桁だけ右シフトまたは左シフトできるバ
レル・シフタ、ROM302は(3)式の定数γkを発生する
n語のROM、加減算器304は入力Aの内容と入力Bの内容
を、加算または減算する加減算器である。カウンタ306
は、CORDICのループ回数を制御するカウンタで、カウン
タ301はバレル・シフタ303のシフト桁数を指定し、ROM3
02の定数番号kを指定するカウンタである。 次に、第3図の動作を第4図のCORDICの算法に基づい
て説明する。
【1】 レジスタ307,308,309にx、y、0(401,402,4
03)を、カウンタ301,306に0、n(405,404)を初期値
として与える。
03)を、カウンタ301,306に0、n(405,404)を初期値
として与える。
【2】 カウンタ306の値がnから1までのnステップ
の間、次のステップ
の間、次のステップ
【3】を繰り返す。
【3】 レジスタ308には(15)式の変数ykが、レジス
タ307には(14)式の変数xkが、レジスタ309には(16)
式の変数vkが、カウンタ301には変数kが、格納されて
いる。バレル・シフタ303はバスから出力される値を、
カウンタ301が示す数だけ右シフトすることにより、2-k
倍する。 レジスタ305の符号桁の値が正のとき(406)ak=+1
となる。このとき、レジスタ307からxを入力Aに転送
し、レジスタ308yをバレル・シフタ303でカウンタ301が
示す値だけ右シフトしたものを入力Bに転送し、加減算
器304で加算し、演算結果をレジスタ307に転送する(41
1)。次に、レジスタ308からyを入力Aに転送し、レジ
スタ307のxをバレル・シフタ303でカウンタ301が示す
値だけ右シフトしたものを入力Bに転送し、加減算器30
4で減算し、演算結果をレジスタ308に転送する(41
2)。次に、レジスタ309からvを入力Aに転送し、カウ
ンタ301のアドレスが示すROM303の値を入力Bに転送
し、加減算器304で加算し、演算結果をレジスタ309に転
送する(413)。 また、レジスタ231の符号桁の値が負のときak=−1
となる。このとき、レジスタ307からxを入力Aに転送
し、レジスタ308yがバレル・シフタ303でカウンタ301が
示す値だけ右シフトしたものを入力Bに転送し、加減算
器304で減算し、演算結果をレジスタ307に転送する(42
1)。次にレジスタ308からyを入力Aに転送し、レジス
タ307のxをバレル・シフタ303でカウンタ301が示す値
だけ右シフトしたものを入力Bに転送し、加減算器304
で加算し、演算結果をレジスタ308に転送する(422)。
次に、レジスタ309からvを入力Aに転送し、カウンタ3
01のアドレスが示すROM303の値を入力Bに転送し、加減
算器304で減算し、演算結果をレジスタ309に転送する
(423)。
タ307には(14)式の変数xkが、レジスタ309には(16)
式の変数vkが、カウンタ301には変数kが、格納されて
いる。バレル・シフタ303はバスから出力される値を、
カウンタ301が示す数だけ右シフトすることにより、2-k
倍する。 レジスタ305の符号桁の値が正のとき(406)ak=+1
となる。このとき、レジスタ307からxを入力Aに転送
し、レジスタ308yをバレル・シフタ303でカウンタ301が
示す値だけ右シフトしたものを入力Bに転送し、加減算
器304で加算し、演算結果をレジスタ307に転送する(41
1)。次に、レジスタ308からyを入力Aに転送し、レジ
スタ307のxをバレル・シフタ303でカウンタ301が示す
値だけ右シフトしたものを入力Bに転送し、加減算器30
4で減算し、演算結果をレジスタ308に転送する(41
2)。次に、レジスタ309からvを入力Aに転送し、カウ
ンタ301のアドレスが示すROM303の値を入力Bに転送
し、加減算器304で加算し、演算結果をレジスタ309に転
送する(413)。 また、レジスタ231の符号桁の値が負のときak=−1
となる。このとき、レジスタ307からxを入力Aに転送
し、レジスタ308yがバレル・シフタ303でカウンタ301が
示す値だけ右シフトしたものを入力Bに転送し、加減算
器304で減算し、演算結果をレジスタ307に転送する(42
1)。次にレジスタ308からyを入力Aに転送し、レジス
タ307のxをバレル・シフタ303でカウンタ301が示す値
だけ右シフトしたものを入力Bに転送し、加減算器304
で加算し、演算結果をレジスタ308に転送する(422)。
次に、レジスタ309からvを入力Aに転送し、カウンタ3
01のアドレスが示すROM303の値を入力Bに転送し、加減
算器304で減算し、演算結果をレジスタ309に転送する
(423)。
【4】 上記ステップをn回実行した後(409)、レジ
スタ231にvn=arctan(y/x)が得られる(410)。 従来は、以上の手順をマイクロプログラムで行ってい
た。 このとき、上記ステップ
スタ231にvn=arctan(y/x)が得られる(410)。 従来は、以上の手順をマイクロプログラムで行ってい
た。 このとき、上記ステップ
【3】の1回の処理にαクロ
ックかかるとすると、全体の演算処理にはn×αクロッ
ク要し、膨大な時間がかかっていた。 〔発明が解決しようとする課題〕 上述した従来例の逆三角関数演算装置には、以下の問
題点がある。 まず、第2図のものでは、第1にハードウェア量が大
きい。バレル・シフタが2個、加減算器が3個必要であ
る。LSI(大規模集積回路)で実現する場合、バレル・
シフタは大きい面積を必要とするため、逆三角関数演算
器としての面積が大きくなってしまう。特に高精度(多
倍長)の演算を行うには、バレル・シフタ,加減算器と
もに面積が増大する。しかも、従来例の演算装置を、逆
三角関数以外の汎用の用途には利用できないため、コス
ト/パフォーマンスが悪い。第2に演算結果の精度が良
くない。(3)式のγkはkが増大するに従って小さく
なるため、γkの有効数字が減少し、LSB付近に丸め誤
差が蓄積される。また、式(7),(8),(11),
(12)は固定小数点数での算法であるため、x、y、ar
ctan(y/x)が浮動小数点数の場合、xとyを固定小数
点数に変換してからarctany/x)を求め、浮動小数点数
に変換しなければならない。このとき、xまたはyが小
さい数である場合、固定小数点数への変換過程で有効数
字が大幅に減少してしまう。 第3図の構成では実行時間が長いという欠点がある。
CORDICの処理(式(6),(7),(8),(10),
(11),(12)をすべてマイクロプログラムで行ってい
たため、膨大な時間がかかってしまう。 〔課題を解決するための手段〕 本発明による逆三角関数演算装置は、2k×arctan(2
-k)またはarctan(2-k)(ただしk=0,1,…,m−1)
をk=m−1からk=0まで逐次発生できる定数発生器
と、第1のレジスタと、第2のレジスタと、前記第2の
レジスタの内容を2k桁(ただしk=1,2,…,m−2,m−1,
m)だけ右シフトできる1個のバレル・シフタと、前記
第1のレジスタの内容に前記バレル・シフタの内容か、
または前記定数発生器の内容を加算または減算し、前記
第1のレジスタに出力する第1の加減算器と、前記第2
のレジスタの内容に前記第1のレジスタの内容を加算ま
たは減算し、前記第2のレジスタに出力する第2の加減
算器と、前記第2のレジスタの符号を入力でき、かつ第
1の加減算器と第2の加減算器が行う演算が、加算か減
算かを制御できるm段のFirst−In Last Out方式のスタ
ックとを有する。 〔作用〕 以下、数式を用いて、本発明の逆三角関数の演算原理
を説明する。本発明の演算原理はCORDICと同様であり、
本発明の算法はCORDIC算法の変形と言える。 CORDICでは、疑似除算と疑似乗算を同時に実行してい
るが、本発明ではまず疑似除算を行い、その後、疑似乗
算を行う。 CORDICでは(2)式のεを無視し、v0=0を初期値と
して疑似乗算を行っていたため、2進n桁の精度を得る
にはnステップの演算が必要だった。ここで、(2)式
でε<2nであるため、2進数で2n桁の精度で求めるなら
ば(1)式よりarctanε≒εと近似できることを利用
し、これを初期値として疑似乗算を行う。 そのため、疑似除算,疑似乗算合わせてのステップ数
はCORDIC同様で約nステップ必要である。 疑似除算の剰余Vmを疑似乗算の初期値として、精度良
く使用するために、疑似除算で1ステップごとにYkを1
桁下位の桁にずらしながら演算する。また、疑似乗算は
疑似除算とは逆の順序で、vkを1桁上位の桁にずらしな
がら行う。 CORDIC算法の式(14),(15)を(17)式のような置
換を行い、式(18),(19)を求める。 Xk=xk, Yk=2k×yk (17) Xk+1=Xk+ak×2-2k×Yk (18) Yk+1=2(Yk−ak×Xk) (19) kの値が大きいときは、ykの値が小さいため、(17)
式の置換によって有効数字が減少するということを防い
でいる。 また、(16)式は(20)式のように変形され、初期値
をvm=ε=Yk/Xkとしk=mからk=i+1まで反復さ
れる。 vk-1=(vk+ak×γk)/2 (20) このように、xとyが浮動小数点数でありy/x《1の
ときは、arctan(y/x)≒y/xであるため、疑似除算のス
テップを途中から始め、疑似乗算のステップを途中で終
わらせる。その結果、桁合わせによる有効数字の大幅減
少を防ぎ、また性能も向上できる。 算法を説明する。ここでは演算結果の精度を2進数で
n(=2m)桁とする。
ックかかるとすると、全体の演算処理にはn×αクロッ
ク要し、膨大な時間がかかっていた。 〔発明が解決しようとする課題〕 上述した従来例の逆三角関数演算装置には、以下の問
題点がある。 まず、第2図のものでは、第1にハードウェア量が大
きい。バレル・シフタが2個、加減算器が3個必要であ
る。LSI(大規模集積回路)で実現する場合、バレル・
シフタは大きい面積を必要とするため、逆三角関数演算
器としての面積が大きくなってしまう。特に高精度(多
倍長)の演算を行うには、バレル・シフタ,加減算器と
もに面積が増大する。しかも、従来例の演算装置を、逆
三角関数以外の汎用の用途には利用できないため、コス
ト/パフォーマンスが悪い。第2に演算結果の精度が良
くない。(3)式のγkはkが増大するに従って小さく
なるため、γkの有効数字が減少し、LSB付近に丸め誤
差が蓄積される。また、式(7),(8),(11),
(12)は固定小数点数での算法であるため、x、y、ar
ctan(y/x)が浮動小数点数の場合、xとyを固定小数
点数に変換してからarctany/x)を求め、浮動小数点数
に変換しなければならない。このとき、xまたはyが小
さい数である場合、固定小数点数への変換過程で有効数
字が大幅に減少してしまう。 第3図の構成では実行時間が長いという欠点がある。
CORDICの処理(式(6),(7),(8),(10),
(11),(12)をすべてマイクロプログラムで行ってい
たため、膨大な時間がかかってしまう。 〔課題を解決するための手段〕 本発明による逆三角関数演算装置は、2k×arctan(2
-k)またはarctan(2-k)(ただしk=0,1,…,m−1)
をk=m−1からk=0まで逐次発生できる定数発生器
と、第1のレジスタと、第2のレジスタと、前記第2の
レジスタの内容を2k桁(ただしk=1,2,…,m−2,m−1,
m)だけ右シフトできる1個のバレル・シフタと、前記
第1のレジスタの内容に前記バレル・シフタの内容か、
または前記定数発生器の内容を加算または減算し、前記
第1のレジスタに出力する第1の加減算器と、前記第2
のレジスタの内容に前記第1のレジスタの内容を加算ま
たは減算し、前記第2のレジスタに出力する第2の加減
算器と、前記第2のレジスタの符号を入力でき、かつ第
1の加減算器と第2の加減算器が行う演算が、加算か減
算かを制御できるm段のFirst−In Last Out方式のスタ
ックとを有する。 〔作用〕 以下、数式を用いて、本発明の逆三角関数の演算原理
を説明する。本発明の演算原理はCORDICと同様であり、
本発明の算法はCORDIC算法の変形と言える。 CORDICでは、疑似除算と疑似乗算を同時に実行してい
るが、本発明ではまず疑似除算を行い、その後、疑似乗
算を行う。 CORDICでは(2)式のεを無視し、v0=0を初期値と
して疑似乗算を行っていたため、2進n桁の精度を得る
にはnステップの演算が必要だった。ここで、(2)式
でε<2nであるため、2進数で2n桁の精度で求めるなら
ば(1)式よりarctanε≒εと近似できることを利用
し、これを初期値として疑似乗算を行う。 そのため、疑似除算,疑似乗算合わせてのステップ数
はCORDIC同様で約nステップ必要である。 疑似除算の剰余Vmを疑似乗算の初期値として、精度良
く使用するために、疑似除算で1ステップごとにYkを1
桁下位の桁にずらしながら演算する。また、疑似乗算は
疑似除算とは逆の順序で、vkを1桁上位の桁にずらしな
がら行う。 CORDIC算法の式(14),(15)を(17)式のような置
換を行い、式(18),(19)を求める。 Xk=xk, Yk=2k×yk (17) Xk+1=Xk+ak×2-2k×Yk (18) Yk+1=2(Yk−ak×Xk) (19) kの値が大きいときは、ykの値が小さいため、(17)
式の置換によって有効数字が減少するということを防い
でいる。 また、(16)式は(20)式のように変形され、初期値
をvm=ε=Yk/Xkとしk=mからk=i+1まで反復さ
れる。 vk-1=(vk+ak×γk)/2 (20) このように、xとyが浮動小数点数でありy/x《1の
ときは、arctan(y/x)≒y/xであるため、疑似除算のス
テップを途中から始め、疑似乗算のステップを途中で終
わらせる。その結果、桁合わせによる有効数字の大幅減
少を防ぎ、また性能も向上できる。 算法を説明する。ここでは演算結果の精度を2進数で
n(=2m)桁とする。
【1】 arctan(y/x)を求めるに当り、xとy0≦y<
x<+∞)を入力する。
x<+∞)を入力する。
【2】 y/x=2-i(Y/X)(1≦Y/X<2,iは整数)とし
てi、X、Yを決定し、xi=X、yi=Yを初期値とす
る。
てi、X、Yを決定し、xi=X、yi=Yを初期値とす
る。
【3】 k=i,i+1,i+2,…,m−1に対して、
【4】を
反復する(疑似除算を行う)。
反復する(疑似除算を行う)。
【4】 Yk≧0ならば ak=+1 Yk<0ならば ak=−1として以下を行う。 Xk+1=Kk+ak×2-2k×Yk (21) Yk+1=2×(Yk−ak×Xk) (22)
【5】 Vm=Ym/Xmを疑似乗算の初期値とする。 (23)
【6】 k=m,m−1,m−2,…,i+1に対して、
【7】を
反復する(疑似乗算を行う)。
反復する(疑似乗算を行う)。
【7】 Vk-1=(Vk+ak×Γk)/2 (24) ただし、Γk=2k×arctan(2-k) (25)
【8】 arctan(y/x)=Viが得られる。 〔実施例〕 次に図面を用いて、本発明の実施例を説明する。 第1図は、本発明に従って逆三角関数arctan(y/x)
を演算する演算装置の第一の実施例である。第1図にお
いて、レジスタ111,121は2種の変数を格納するレジス
タ、加減算器112,122は式(21)(22),(24)で加算
または減算を行う加減算器、バレル・シフタ113はレジ
スタ121の内容を任意の偶数の桁数だけ右シフトできる
バレル・シフタ、シフタ114は加減算器112の出力を1/2
倍してレジスタ111に出力するシフタ、シフタ124は加減
算器122の出力を2倍してレジスタ121に出力するシフタ
である。ROM104は(25)式の定数Γkを格納する2m語の
ROM、指数部演算器103はバレル・シフタ113のシフト数
およびROM104のアドレスを制御し、指数部の演算を行う
演算器、スタック105は数列{ak}を蓄積でき、かつ加
減算器112,122で行う演算が加算か減算かを制御する。F
irst−In,Last−Out方式のスタック、除算器106はバス1
01から除数,被除数を入力し商をバス101に出力する除
算器である。バス101は入出力データおよび演算の中間
結果を転送するためのバス、バス102はレジスタ111の値
を転送するためのバスである。 次に、第1図の動作を本発明の算法に基づいて説明す
る。
を演算する演算装置の第一の実施例である。第1図にお
いて、レジスタ111,121は2種の変数を格納するレジス
タ、加減算器112,122は式(21)(22),(24)で加算
または減算を行う加減算器、バレル・シフタ113はレジ
スタ121の内容を任意の偶数の桁数だけ右シフトできる
バレル・シフタ、シフタ114は加減算器112の出力を1/2
倍してレジスタ111に出力するシフタ、シフタ124は加減
算器122の出力を2倍してレジスタ121に出力するシフタ
である。ROM104は(25)式の定数Γkを格納する2m語の
ROM、指数部演算器103はバレル・シフタ113のシフト数
およびROM104のアドレスを制御し、指数部の演算を行う
演算器、スタック105は数列{ak}を蓄積でき、かつ加
減算器112,122で行う演算が加算か減算かを制御する。F
irst−In,Last−Out方式のスタック、除算器106はバス1
01から除数,被除数を入力し商をバス101に出力する除
算器である。バス101は入出力データおよび演算の中間
結果を転送するためのバス、バス102はレジスタ111の値
を転送するためのバスである。 次に、第1図の動作を本発明の算法に基づいて説明す
る。
【1】 2進浮動小数点数で表現されたxとy(0≦y
<x<+∞)の値をバス101から入力し、y/x=2-i×(Y
/X)(1≦Y/X<2,iは整数)となるような指数部の補数
iを、指数部演算器103で求める。
<x<+∞)の値をバス101から入力し、y/x=2-i×(Y
/X)(1≦Y/X<2,iは整数)となるような指数部の補数
iを、指数部演算器103で求める。
【2】 xの仮数部Xをレジスタ111に、yの仮数部Y
をレジスタ121に入力する。
をレジスタ121に入力する。
【3】 指数部演算器103からの出力値kをi,i+1,i+
2,…,m−1とインクメントしながら、
2,…,m−1とインクメントしながら、
【4】を反復す
る。
る。
【4】 まず、レジスタ121の符号桁の値をスタック105
に入力(プッシュ)する。 レジスタ111のXk値をバス102を介して加減算器112の
入力Aおよび加減算器122の入力Cに転送する。同時に
レジスタ121のYk値をバス101を介して加減算器122の入
力Dに転送し、同時に、バレル・シフタ113でレジスタ1
21のYk値を指数部演算器103の内容の2倍の桁数だけ右
シフト(2-2k倍)して加減算器112の入力Bに転送す
る。 次に、レジスタ121の符号桁の値が正ならば加減算器1
12は入力Aと入力Bを加算し、負ならば入力Aから入力
Bを減算して、レジスタ111に書き込む。同時に、レジ
スタ121の符号桁の値が正ならば加減算器122は入力Dか
ら入力Cを減算し、負ならば入力Dと入力Cを加算し
て、演算結果をシフタ124で2倍してレジスタ121に書き
込む。
に入力(プッシュ)する。 レジスタ111のXk値をバス102を介して加減算器112の
入力Aおよび加減算器122の入力Cに転送する。同時に
レジスタ121のYk値をバス101を介して加減算器122の入
力Dに転送し、同時に、バレル・シフタ113でレジスタ1
21のYk値を指数部演算器103の内容の2倍の桁数だけ右
シフト(2-2k倍)して加減算器112の入力Bに転送す
る。 次に、レジスタ121の符号桁の値が正ならば加減算器1
12は入力Aと入力Bを加算し、負ならば入力Aから入力
Bを減算して、レジスタ111に書き込む。同時に、レジ
スタ121の符号桁の値が正ならば加減算器122は入力Dか
ら入力Cを減算し、負ならば入力Dと入力Cを加算し
て、演算結果をシフタ124で2倍してレジスタ121に書き
込む。
【5】 レジスタ111からXmを、レジスタ121からYmをバ
ス101を介して除算器106に転送する。除算器106ではVm
=Ym/Xmを演算し、商Vmをバス101を介してレジスタ111
に転送する。
ス101を介して除算器106に転送する。除算器106ではVm
=Ym/Xmを演算し、商Vmをバス101を介してレジスタ111
に転送する。
【6】 指数部演算器105の出力値kをk=m,m−1,m−
2…,i+1とデクリメントしながら、
2…,i+1とデクリメントしながら、
【7】を反復す
る。
る。
【7】 レジスタ111のVk値をバス102を介して加減算器
112の入力Aに転送し、同時にROM104から定数Γkをバ
ス101を介して加減算器112の入力Bに転送する。次に、
レジスタ105からポップされた値が正ならば、加減算器1
12は入力Aと入力Bを加算し、負ならば入力Aから入力
Bを減算し、シフタ114で1/2倍してレジスタ111に書き
込む。
112の入力Aに転送し、同時にROM104から定数Γkをバ
ス101を介して加減算器112の入力Bに転送する。次に、
レジスタ105からポップされた値が正ならば、加減算器1
12は入力Aと入力Bを加算し、負ならば入力Aから入力
Bを減算し、シフタ114で1/2倍してレジスタ111に書き
込む。
【8】 レジスタ111にarctan(y/x)の仮数部が得られ
る。arctan(y/x)の指数部はy/xの指数部iと同じであ
る。 このように、ステップ
る。arctan(y/x)の指数部はy/xの指数部iと同じであ
る。 このように、ステップ
【4】と
【7】の演算は1クロ
ックで処理でき、ステップ
ックで処理でき、ステップ
【5】に除算にαクロックか
かるとすると、全体の処理時間は、{2(m−i)+
α}≒(n+α)クロック要する。つまりCORDICの演算
よりも除算器の処理時間だけしか遅くならない。 以上述べたように本実施例では、バレル・シフタ1個
と加減算器2個を用いて、高速かつ高精度にarctan(y/
x)を演算できる。 また、arctan zを求めたいときは、y=z、x=1を
初期値とすれば良い。 上述した実施例では浮動小数点数を扱うが、同一のハ
ードウェアで固定小数点数も扱える。変数iをi=0に
固定すればよい。 算法は、次のゆに変形できる。
かるとすると、全体の処理時間は、{2(m−i)+
α}≒(n+α)クロック要する。つまりCORDICの演算
よりも除算器の処理時間だけしか遅くならない。 以上述べたように本実施例では、バレル・シフタ1個
と加減算器2個を用いて、高速かつ高精度にarctan(y/
x)を演算できる。 また、arctan zを求めたいときは、y=z、x=1を
初期値とすれば良い。 上述した実施例では浮動小数点数を扱うが、同一のハ
ードウェアで固定小数点数も扱える。変数iをi=0に
固定すればよい。 算法は、次のゆに変形できる。
【1】 Xi=x,Yi=y(0≦y<x<+∞)を初期値と
する。 (Xi、Yiを固定小数点数にする)。
する。 (Xi、Yiを固定小数点数にする)。
【2」 変数iをi=0とする。 【3〜7】 (浮動小数点の算法と同様)
【8】 arctan(y/x)が得られる。 〔発明の効果〕 以上説明したように、本発明による逆三角関数演算装
置は、次の2つの効果を有する。第1にハードウェア量
を低減できる。すなわち、バレル・シフタが1個、加減
算器が2個で実現でき、従来例よりもバレル・シフタ,
加減算器共に1個少い。従来例より増加したハードウェ
アはスタックと除算器である。スタックはm桁のシフト
レジスタで、乗算器は実施例1の加減算器の片方に簡単
な回路を付加することでも実現できるため、増加したハ
ードウェア量は減少したハードウェア量よりはるかに少
ない。また、逆三角関数演算装置を汎用の浮動小数点演
算装置として実現する場合、従来例での2個のバレル・
シフタや3個の加減算器は三角関数,逆三角関数以外に
用途はないが、実施例1の除算器は他の用途にも有用で
ある。第2の演算結果の精度が良い。本発明の算法は、
常に有効数字が最大になるように桁合わせを行いながら
演算するために、演算精度が良い。また、x、y、arct
an(y/x)が浮動小数点の場合、x、yが小さい数であ
っても、有効数字が減少しない。第3に演算時間を短縮
できる。本発明の演算装置は、CORDICの処理をハードウ
ェアで実現している。このため、マイクロプログラムで
制御するのに比べ、1/(CORDICの1回のループにかかっ
た時間)の時間で演算ができる。
置は、次の2つの効果を有する。第1にハードウェア量
を低減できる。すなわち、バレル・シフタが1個、加減
算器が2個で実現でき、従来例よりもバレル・シフタ,
加減算器共に1個少い。従来例より増加したハードウェ
アはスタックと除算器である。スタックはm桁のシフト
レジスタで、乗算器は実施例1の加減算器の片方に簡単
な回路を付加することでも実現できるため、増加したハ
ードウェア量は減少したハードウェア量よりはるかに少
ない。また、逆三角関数演算装置を汎用の浮動小数点演
算装置として実現する場合、従来例での2個のバレル・
シフタや3個の加減算器は三角関数,逆三角関数以外に
用途はないが、実施例1の除算器は他の用途にも有用で
ある。第2の演算結果の精度が良い。本発明の算法は、
常に有効数字が最大になるように桁合わせを行いながら
演算するために、演算精度が良い。また、x、y、arct
an(y/x)が浮動小数点の場合、x、yが小さい数であ
っても、有効数字が減少しない。第3に演算時間を短縮
できる。本発明の演算装置は、CORDICの処理をハードウ
ェアで実現している。このため、マイクロプログラムで
制御するのに比べ、1/(CORDICの1回のループにかかっ
た時間)の時間で演算ができる。
第1図は、本発明の一実施例を示すブロック図、第2図
は、第1の従来例を示すブロック図、第3図は、第2の
従来例を示すブロック図、第4図は、従来例のフローチ
ャート図である。 101,102……データ・バス、111,121……レジスタ、112,
122……加減算器、113……バレル・シフタ、103……指
数部演算器、104……定数ROM、105……スタック、106…
…除算器、211,221,231……レジスタ、212,222,232……
加減算器、213,223……バレル・シフタ、204……定数RO
M、205……カウンタ、301,306……カウンタ、302……定
数ROM、303……バレル・シフタ、305,307,308,309……
レジスタ。
は、第1の従来例を示すブロック図、第3図は、第2の
従来例を示すブロック図、第4図は、従来例のフローチ
ャート図である。 101,102……データ・バス、111,121……レジスタ、112,
122……加減算器、113……バレル・シフタ、103……指
数部演算器、104……定数ROM、105……スタック、106…
…除算器、211,221,231……レジスタ、212,222,232……
加減算器、213,223……バレル・シフタ、204……定数RO
M、205……カウンタ、301,306……カウンタ、302……定
数ROM、303……バレル・シフタ、305,307,308,309……
レジスタ。
Claims (1)
- 【請求項1】2k×arctan(2-k)またはarctan(2-k)
(ただしk=0,1,…,m−1)をk=m−1からk=0ま
で逐次発生できる定数発生器と、第1のレジスタと、第
2のレジスタと、前記第2のレジスタの内容を2k桁(た
だしk=1,2,…,m−2,m−1,m)だけ右シフトができる1
個のバレル・シフタと、前記第1のレジスタの内容に前
記バレル・シフタの内容か、または前記定数発生器の内
容を加算または減算し、前記第1のレジスタに出力する
第1の加減算器と、前記第2のレジスタの内容に前記第
1のレジスタの内容を加算または減算し、前記第2のレ
ジスタに出力する第2の加減算器と、前記第2のレジス
タの符号を入力でき、かつ第1の加減算器と第2の加減
算器を行う演算が、加算か減算かを制御できるm段のス
タックとを備えることを特徴とする逆三角関数演算装
置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP63035901A JP2504102B2 (ja) | 1988-02-17 | 1988-02-17 | 逆三角関数演算装置 |
US07/311,168 US4899302A (en) | 1988-02-17 | 1989-02-15 | Arithmetic unit for inverse trigonometric function |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP63035901A JP2504102B2 (ja) | 1988-02-17 | 1988-02-17 | 逆三角関数演算装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH01209529A JPH01209529A (ja) | 1989-08-23 |
JP2504102B2 true JP2504102B2 (ja) | 1996-06-05 |
Family
ID=12454930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP63035901A Expired - Fee Related JP2504102B2 (ja) | 1988-02-17 | 1988-02-17 | 逆三角関数演算装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US4899302A (ja) |
JP (1) | JP2504102B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6139838A (en) | 1996-09-06 | 2000-10-31 | Juridical Foundation The Chemo-Sero-Therapeutic Research Institute | Tissue plasminogen activator medicinal composition |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5271090A (en) * | 1990-03-21 | 1993-12-14 | At&T Bell Laboratories | Operational speed improvement for neural network |
US5305246A (en) * | 1990-07-19 | 1994-04-19 | Lindsley Brett L | Device and method for evaluating inverse trigonometric functions |
CA2084989A1 (en) * | 1990-07-19 | 1992-01-20 | Brett L. Lindsley | Device for evaluating inverse trigonometric functions |
GB9108467D0 (en) * | 1991-04-19 | 1991-06-05 | British Aerospace | Waveform generation |
US5739820A (en) * | 1992-11-19 | 1998-04-14 | Apple Computer Inc. | Method and apparatus for specular reflection shading of computer graphic images |
DE4335925C2 (de) * | 1993-10-21 | 1997-04-03 | Bosch Gmbh Robert | Schaltungsanordnung zur Signalverarbeitung nach dem CORDIC-Verfahren |
US5648924A (en) * | 1995-04-18 | 1997-07-15 | Motorola, Inc. | Method and apparatus for finding arctangents |
US5668749A (en) * | 1995-05-04 | 1997-09-16 | Motorola, Inc. | Circuit for performing arithmetic operations in a demodulator |
US5563916A (en) * | 1995-06-05 | 1996-10-08 | Hitachi America, Ltd. | Apparatus and method for varying the slew rate of a digital automatic gain control circuit |
US6138131A (en) * | 1998-11-27 | 2000-10-24 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Arc-tangent circuit for continuous linear output |
US7395300B2 (en) * | 2004-01-27 | 2008-07-01 | Broadcom Corporation | System, and method for calculating product of constant and mixed number power of two |
JP5304483B2 (ja) * | 2009-06-30 | 2013-10-02 | 富士通株式会社 | 演算処理装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3956623A (en) * | 1974-10-21 | 1976-05-11 | Gte Automatic Electric Laboratories Incorporated | Digital phase detector |
JPS6029409B2 (ja) * | 1978-02-03 | 1985-07-10 | 日本電気株式会社 | 三角関数計算装置 |
US4164022A (en) * | 1978-05-05 | 1979-08-07 | Sperry Rand Corporation | Electronic digital arctangent computational apparatus |
-
1988
- 1988-02-17 JP JP63035901A patent/JP2504102B2/ja not_active Expired - Fee Related
-
1989
- 1989-02-15 US US07/311,168 patent/US4899302A/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6139838A (en) | 1996-09-06 | 2000-10-31 | Juridical Foundation The Chemo-Sero-Therapeutic Research Institute | Tissue plasminogen activator medicinal composition |
Also Published As
Publication number | Publication date |
---|---|
JPH01209529A (ja) | 1989-08-23 |
US4899302A (en) | 1990-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Karp et al. | High-precision division and square root | |
US6163791A (en) | High accuracy estimates of elementary functions | |
EP0421092B1 (en) | Method and apparatus for performing mathematical functions using polynomial approximation and a rectangular aspect ratio multiplier | |
JP2504102B2 (ja) | 逆三角関数演算装置 | |
JPH03204720A (ja) | 初等関数演算装置 | |
US4956799A (en) | Trigonometric function arithmetic processor using pseudo-division | |
JPH0454633A (ja) | 高基数除算器 | |
US4594680A (en) | Apparatus for performing quadratic convergence division in a large data processing system | |
Piromsopa et al. | An FPGA implementation of a fixed-point square root operation | |
JP2822399B2 (ja) | 対数関数演算装置 | |
JP2508784B2 (ja) | 指数関数演算装置 | |
Daumas et al. | Modular range reduction: A new algorithm for fast and accurate computation of the elementary functions | |
Schwarz et al. | Power6 decimal divide | |
US20230086090A1 (en) | Methods and Apparatus for Quotient Digit Recoding in a High-Performance Arithmetic Unit | |
US6349317B1 (en) | Efficient radix-4 CORDIC vector rotators and computers of sine and cosine functions | |
Pineiro et al. | High-radix logarithm with selection by rounding | |
Chang et al. | A division algorithm for residue numbers | |
Yuen | A note on base–2 arithmetic logic | |
US6055553A (en) | Apparatus for computing exponential and trigonometric functions | |
Gustafsson et al. | Basic arithmetic circuits | |
JPH04172526A (ja) | 浮動小数点除算器 | |
JP2546916B2 (ja) | 三角関数演算装置 | |
Takagi | Arithmetic unit based on a high-speed multiplier with a redundant-binary addition tree | |
RU2276805C2 (ru) | Способ и устройство для выделения целой и дробных компонент из данных с плавающей точкой | |
Chen et al. | Decimal floating-point antilogarithmic converter based on selection by rounding: Algorithm and architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |