(57)【特許請求の範囲】
【請求項１】
与えられた漸化式を繰り返し用いて、演算対象である引数の平方根をニュートン法により演算する演算装置において、一定の規格範囲２＾０〜２＾ｎを有する仮数部と指数部とで構成される上記引数の上記指数部から指数値Ｅｉを抽出し、上記漸化式に代入する初期値を、２＾(Ｅｉ／２)と上記仮数部の規格範囲内の数値２＾ｋとに基づいて設定することを特徴とする演算装置。
【請求項２】
上記演算対象となる引数が非正規化数のときは、該引数に所定の係数２＾(２ｍ)を乗じて正規化数の範囲に移動させる補正を行った後に上記指数値Ｅｉを抽出し、上記漸化式を繰り返し用いた演算結果に所定の係数２＾(−ｍ)を乗じて上記平方根を得ることを特徴とする請求項１に記載の演算装置。
【請求項３】
(Ｅｉ／２)の整数部をＺとすると、２＾Ｚに上記数値２＾ｋを係数として乗じた値を上記初期値とすることを特徴とする請求項１または２に記載の演算装置。
【請求項４】
与えられた漸化式を繰り返し用いて、演算対象である引数の平方根の逆数をニュートン法により演算する演算装置において、一定の規格範囲２＾０〜２＾ｎを有する仮数部と指数部とで構成される上記引数の上記指数部から指数値Ｅｉを抽出し、上記漸化式に代入する初期値を、２＾(Ｅｉ／２)と上記仮数部の規格範囲内の数値２＾ｋとに基づいて設定された所定値Ａの逆数とすることを特徴とする演算装置。
【請求項５】
上記演算対象となる引数が非正規化数のときは、該引数に所定の係数２＾(２ｍ)を乗じて正規化数の範囲に移動させる補正を行った後に上記指数値Ｅｉを抽出し、上記漸化式を繰り返し用いた演算結果に所定の係数２＾ｍを乗じて、上記平方根の逆数を得ることを特徴とする請求項４に記載の演算装置。
【請求項６】
(Ｅｉ／２)の整数部をＺとすると、２＾Ｚに上記数値２＾ｋを係数として乗じた値を上記所定値Ａとすることを特徴とする請求項４または５に記載の演算装置。
【請求項７】
２＾Ｚに乗じる上記係数２＾ｋは、上記仮数部の規格範囲の中央値２＾(ｎ／２)とすることを特徴とする請求項３または６に記載の演算装置。
【請求項８】
上記係数２＾ｋは、上記指数値Ｅｉの偶数、奇数の別に応じて設定することを特徴とする請求項３または６に記載の演算装置。
【請求項９】
上記指数値Ｅｉが偶数のとき、上記係数２＾ｋは上記仮数部の規格範囲の１／４の点２＾(ｎ／４)とし、上記指数値Ｅｉが奇数のとき上記係数２＾ｋは上記仮数部の規格範囲の３／４の点２＾(３ｎ／４)とすることを特徴とする請求項８に記載の演算装置。
【請求項１０】
上記仮数部の規格範囲は、２＾０〜２＾１であることを特徴とする請求項１〜９のいずれか１項に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、平方根や平方根の逆数（以下、逆平方根と称す）を演算する演算装置に関するものである。
【背景技術】
【０００２】
演算対象の引数の平方根（あるいは逆平方根）を演算する方法として、引数とは無関係な初期値を予め設定し、与えられた漸化式を用いて繰り返し計算するニュートン法が知られている。ニュートン法による平方根演算では、漸化式を用いた繰り返し計算を行う際に予め設定する初期値に応じて演算の繰り返し回数が異なり、初期値と解が離れていると繰り返し回数が多くなって演算時間が増大するため、初期値を適切に設定することが重要である。
ところで、車載用の電子機器等の組み込み用装置では、設置スペース、供給電力、冷却といった物理的な制約が存在することから、組み込み用装置内に搭載できる演算装置および記憶装置に厳しい制約がある。このような組み込み用装置内の演算装置では、小型で消費電力が小さく安価なＣＰＵが求められる。
また、車載用の電子機器等の組み込み用装置内の演算装置では、通常、リアルタイム処理能力が要求され、このような演算装置で平方根演算を行う場合、高速かつ高精度な演算が必要である。
【０００３】
ニュートン法を用いた従来の演算方法では、初期値の設定のために、２次多項式を用いて初期値近似式が計算され、その係数はＲＯＭに記憶され、ＲＯＭにアドレス指定して係数が選択される（例えば、特許文献１参照）。
また、ニュートン法を用いた従来の別例による演算方法では、計算精度および反復回数によって定まる所定個のエントリを有し、各エントリについてエントリの値に対応する演算結果を記憶するテーブル記憶部を備えて、初期値の設定を行う（例えば、特許文献２参照）。また、他の別例による演算方法では、被演算数の初期近似値データを予め記憶するテーブルを備えることが記載されている（例えば、特許文献３参照）。
また、ニュートン法以外の従来の演算方法として、２ｎビットの入力数値から、最大でｎサイクルの演算を繰り返してｎビットの解を解候補値保持手段から出力することが記載されている（例えば、特許文献４参照）。
【０００４】
【特許文献１】特開平７−２００２６６号公報
【特許文献２】特開平１０−５５２６６号公報
【特許文献３】特開平１１−２４８９３号公報
【特許文献４】特開平８−３３９２９３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記特許文献１〜３に記載される演算方法では、上述したようにニュートン法で用いる初期値を設定するために予め設定されたテーブルを記憶し、このテーブルを用いて初期値を設定することで演算回数を低減できる。しかしながら、テーブル用のメモリが必要であると共に、テーブルを検索して初期値を設定するための演算が必要になるため、専用の平方根演算回路を備えた、消費電力や発熱量の多い演算装置が用いられる。このため、小型で消費電力が小さく安価なＣＰＵを用いて演算装置を構成することが困難であった。
また、上記特許文献４では、テーブルを必要としないが、解を０〜（２＾ｎ）の範囲と推定して、ｎビット精度の結果を得る時に最大ｎサイクルの演算量を必要とし、高速演算処理が困難である。また、漸化式を用いて演算するニュートン法と異なり、引数が本来持つ２ｎビットの精度が低減され、演算結果の精度がｎビットに制約される。
【０００６】
この発明は、上記のような問題点を解消するために成されたものであって、平方根あるいは逆平方根を演算する演算装置を、高速、高精度な演算が可能で、しかもメモリの消費量や演算負荷が小さく小型で消費電力が小さく安価に構成することを目的とする。
【課題を解決するための手段】
【０００７】
第１の発明による演算装置は、与えられた漸化式を繰り返し用いて、演算対象である引数の平方根をニュートン法により演算する。そして、一定の規格範囲２＾０〜２＾ｎを有する仮数部と指数部とで構成される上記引数の上記指数部から指数値Ｅｉを抽出し、上記漸化式に代入する初期値を、２＾(Ｅｉ／２)と上記仮数部の規格範囲内の数値２＾ｋとに基づいて設定するものである。
【０００８】
また第２の発明による演算装置は、与えられた漸化式を繰り返し用いて、演算対象である引数の平方根の逆数をニュートン法により演算する。そして、一定の規格範囲２＾０〜２＾ｎを有する仮数部と指数部とで構成される上記引数の上記指数部から指数値Ｅｉを抽出し、上記漸化式に代入する初期値を、２＾(Ｅｉ／２)と上記仮数部の規格範囲内の数値２＾ｋとに基づいて設定された所定値Ａの逆数とするものである。
【発明の効果】
【０００９】
第１、第２の発明による演算装置では、漸化式を用いたニュートン法による演算であって、テーブルを用いることなく、演算結果に近い範囲内に初期値を適切に容易に設定することができる。このため、メモリの消費量や演算負荷が小さく、高速、高精度に平方根（あるいは逆平方根）を演算することが可能になると共に、小型で消費電力が小さく安価な演算装置が得られる。
【発明を実施するための最良の形態】
【００１０】
実施の形態１．
以下、この発明の実施の形態１による平方根演算用の演算装置で、組み込み用装置内の演算装置について図に基づいて説明する。
図１は、この発明の実施の形態１による演算装置１の概略構成を示す図である。
図に示すように、演算装置１は、四則演算およびビット演算といった基本的な演算機能を備える汎用演算回路である演算部２と、演算手順、演算データといったものを記憶する記憶部３と、組み込み用装置の動作のために必要に応じて演算部２を制御する制御部４と、演算対象である引数を保管するバッファ５と、演算結果を保管するバッファ６とを備える。
【００１１】
次に、この演算装置１の動作を、図１に基づいて説明する。
組み込み用装置にて平方根値が必要になった時、制御部４は、バッファ５に平方根演算対象である引数を設定し、引数の平方根演算を演算部２に要求する。演算部２は、平方根演算の要求を受け付けると、記憶部３から平方根演算手順を読み出し、引数の平方根演算を実行する。続いて演算部２は平方根演算結果をバッファ６に保管したのち、演算完了を制御部４に知らせる。制御部４は演算完了の知らせを受け取ると、バッファ６から演算結果を取得する。
【００１２】
ところで、演算装置１内で扱われる数値は、浮動小数点標準が用いられるため、一定の規格範囲２＾０〜２＾ｎを有する仮数部と、整数の指数値を有する指数部とで構成される。通常、IEEE754において仮数部の規格範囲２＾０〜２＾ｎは、ｎ＝１であるため１〜２となる。
また、指数値Ｅｉとする正規化数の平方根Ｙは、（Ｅｉ÷２）の整数部をＺとすると２＾Ｚ以上の一定の範囲（以下、解の範囲と称す）内に必ず存在することが判っている。この解の範囲は２＾Ｚと仮数部の規格範囲２＾０〜２＾ｎとに基づいて決定される範囲２＾Ｚ〜２＾（Ｚ＋ｎ）であり、IEEE754においては２＾Ｚ〜２＾（Ｚ＋１）である。
このように、平方根Ｙは、２＾Ｚ〜２＾（Ｚ＋ｎ）の解の範囲内に存在するため、この実施の形態では、ニュートン法で平方根を求めるための漸化式の初期値をこの解の範囲内に設定する。またこの実施の形態では、仮数部の規格範囲を２＾０〜２＾１とし、ニュートン法で用いる漸化式は、
Ｙｎ＋１＝０．５＊（Ｙｎ＋Ｘ÷Ｙｎ）
とする。
【００１３】
演算装置１による平方根演算の動作の詳細を、図２のフローチャートに基づいて以下に示す。
まず、制御部４は、演算対象として引数Ｘを設定し、演算部２に対し平方根演算を要求する（Ｓ１）。次いで、演算部２は記憶部３から平方根演算手順を読み出し（Ｓ２）、続いて演算部２にて、以下のステップ（Ｓ３〜Ｓ１２）に示す平方根演算を実行する。
引数Ｘが正の実数であるかを判定し（Ｓ３）、引数Ｘが正の実数で無ければ平方根演算できない範囲であることから、演算結果Ｙに任意の特異値、例えばIEEE754に規定されている値を設定する（Ｓ４）。
ステップＳ３において、引数Ｘが正の実数の場合、引数Ｘから指数値の読み出しコマンドｆｒｅｘｐで指数値Ｅｉを取り出し（Ｓ５）、（Ｅｉ÷２）の整数部Ｚを取り出す（Ｓ６）。
【００１４】
次に、上記漸化式に代入する初期値Ｉｎｉｔを以下のように算出する。
Ｉｎｉｔ＝（２＾Ｅｒ）＊（２＾Ｚ）
ここで、２＾Ｚに乗じる係数２＾Ｅｒは、仮数部の範囲２＾０〜２＾１内の数値２＾ｋとなる係数であり、ここではＥｒ＝０．５である中央値２＾０．５を用いる。実際には、以下の値を予め設定して用いる。
２＾Ｅｒ＝１．４１４２１３５・・・
図中のフローチャートでは、係数２＾Ｅｒを仮数部、２＾Ｚを指数部とみなして、仮数部と指数部を結合するコマンドｌｄｅｘｐを使用して、
Ｉｎｉｔ ＝ｌｄｅｘｐ（（２＾Ｅｒ），Ｚ）
として初期値を設定している（Ｓ７）。
【００１５】
次に、ステップＳ７において算出した値Ｉｎｉｔを漸化式の近似値Ｙｒｅｆの初期値として設定する（Ｓ８）。
次に、平方根の近似値Ｙｒｅｆを前回値Ｙｏｌｄとして保管しておき（Ｓ９）、漸化式を使用して平方根の近似値Ｙｒｅｆの今回値を、
Ｙｒｅｆ＝０．５＊（Ｙｏｌｄ＋Ｘ÷Ｙｏｌｄ）
として算出する（Ｓ１０）。
次に、平方根の近似値（今回値）Ｙｒｅｆと前回値Ｙｏｌｄとを比較し（Ｓ１１）、比較結果が異なれば、ステップＳ９に戻る。また、比較結果が一致していれば近似値Ｙｒｅｆが真の値に到達したと判断し、Ｙｒｅｆを平方根の演算結果Ｙとする（Ｓ１２）。
そして、演算部２は演算結果をバッファ６に保管したのち、演算完了を制御部４に知らせる。
【００１６】
この実施の形態では、ニュートン法で平方根を求めるための漸化式の初期値を設定するのに、引数Ｘの指数部の指数値Ｅｉを取り出し、（Ｅｉ÷２）の整数部Ｚを用いた数値２＾Ｚに、仮数部の範囲２＾０〜２＾１内の中央値２＾０．５を係数として乗じた値を初期値とした。これにより、上述した平方根Ｙの解の範囲内の中央に初期値を設定することが可能になり、平方根の演算結果に近い初期値を容易に設定できる。
また、初期値を平方根の演算結果に近い値に設定できるため、少ない演算サイクル数で演算できる。引数Ｘが正規化数の場合はｎ−７サイクル以内、非正規化数の場合は２ｎ−８サイクル以内に演算を完了できることが、シミュレーションにて確認された。また、漸化式を用いたニュートン法であるため、２ｎビットの引数Ｘに対して平方根Ｙは２ｎビット精度を確保できる。
【００１７】
このように、この実施の形態では、初期値設定用のテーブル用のメモリを要することなく、容易に適切に初期値を設定することができる。このため、メモリの消費量や演算負荷が小さく、小型で消費電力が小さく安価な構成で、高速、高精度に平方根を演算することが可能な演算装置１が得られる。これにより、設置スペース、供給電力、冷却といった物理的な制約が存在する組み込み用装置内に搭載するのに適した演算装置１を提供できる。
【００１８】
なお、上記実施の形態では、仮数部の範囲を２＾０〜２＾１としたが、仮数部の範囲が２＾０〜２＾ｎの場合は、２＾Ｚに、仮数部の範囲２＾０〜２＾ｎ内の中央値２＾（ｎ÷２）を係数として乗じた値を初期値とする。これにより、平方根Ｙの解の範囲内の中央に初期値を設定することが可能になり、平方根の演算結果に近い初期値を容易に設定でき、上記実施の形態と同様の効果が得られる。
また、２＾Ｚに乗じる係数は、仮数部の範囲２＾０〜２＾ｎ内の数値２＾ｋであれば中央値以外の数値でも良く、平方根Ｙの解の範囲内に初期値を設定することが可能になり、平方根の演算結果に近い初期値を容易に設定できる。
【００１９】
実施の形態２．
上記実施の形態１では、引数Ｘの指数値Ｅｉに、偶数と奇数との区別をせずに、平方根演算を行ったが、この実施の形態２では、指数値Ｅｉが偶数の場合と奇数の場合とで漸化式に代入する初期値の設定を変更する。
上述したように、指数値Ｅｉとする正規化数の平方根Ｙの解の範囲は、（Ｅｉ÷２）の整数部をＺとすると、２＾Ｚと仮数部の規格範囲２＾０〜２＾ｎとに基づいて決定される範囲２＾Ｚ〜２＾（Ｚ＋ｎ）である。特に、指数値Ｅｉが偶数のとき、解の範囲は２＾Ｚ〜２＾（Ｚ＋ｎ÷２）であり、指数値Ｅｉが奇数のとき、解の範囲は２＾（Ｚ＋ｎ÷２）〜２＾（Ｚ＋ｎ）である。
【００２０】
即ち、指数値Ｅｉが偶数のとき、初期値を解の範囲２＾Ｚ〜２＾（Ｚ＋ｎ÷２）内に設定する。ｎ＝１で仮数部の規格範囲を２＾０〜２＾１とすると、初期値を２＾Ｚ〜２＾（Ｚ＋０．５）内に設定する。具体的には、２＾０〜２＾０．５内の数値２＾ｋを係数として２＾Ｚに乗じる。即ち、初期値Ｉｎｉｔを、
Ｉｎｉｔ ＝（２＾ｋ）＊（２＾Ｚ）
として演算する。ここで、２＾Ｚに乗じる係数２＾ｋは、仮数部の範囲２＾０〜２＾１の１／４のポイントである２＾０．２５を用いる。実際には、以下の値を予め設定して用いる。
２＾０．２５＝１．１８９２０７・・・
【００２１】
また、指数値Ｅｉが奇数のとき、初期値を解の範囲２＾（Ｚ＋ｎ÷２）〜２＾（Ｚ＋ｎ）内に設定する。ｎ＝１で仮数部の規格範囲を２＾０〜２＾１とすると、初期値を２＾（Ｚ＋０．５）〜２＾（Ｚ＋１）内に設定する。具体的には、２＾０．５〜２＾１内の数値２＾ｋを係数として２＾Ｚに乗じる。即ち、初期値Ｉｎｉｔを、
Ｉｎｉｔ ＝（２＾ｋ）＊（２＾Ｚ）
として演算する。ここで、２＾Ｚに乗じる係数２＾ｋは、仮数部の範囲２＾０〜２＾１の３／４のポイントである２＾０．７５を用いる。実際には、以下の値を予め設定して用いる。
２＾０．７５＝１．６８１７９２・・・
【００２２】
このように、指数値Ｅｉが偶数の場合と奇数の場合とで分けて、それぞれ漸化式に代入する初期値を設定する。用いる漸化式は上記実施の形態１と同様で、初期値の設定以外の演算方法も上記実施の形態１と同様である。引数Ｘが正規化数の場合はｎ−８サイクル以内、非正規化数の場合は２ｎ−８サイクル以内に演算を完了できることが、シミュレーションにて確認された。また、漸化式を用いたニュートン法であるため、２ｎビットの引数Ｘに対して平方根Ｙは２ｎビット精度を確保できる。
【００２３】
この実施の形態においても、初期値設定用のテーブル用のメモリを要することなく、容易に適切に初期値を設定することができる。このため、メモリの消費量や演算負荷が小さく、小型で消費電力が小さく安価な構成で、高速、高精度に平方根を演算することが可能な演算装置１が得られる。これにより、設置スペース、供給電力、冷却といった物理的な制約が存在する組み込み用装置内に搭載するのに適した演算装置１を提供できる。
また、指数値Ｅｉが偶数の場合と奇数の場合とで区別して初期値の設定を行うため、上記実施の形態１よりも、平方根の演算結果により近い初期値を容易に設定できる。このため、正規化数では上記実施の形態１よりも１回少ない演算サイクル数で演算できる。
【００２４】
なお、上記実施の形態では、仮数部の範囲を２＾０〜２＾１としたが、仮数部の範囲が２＾０〜２＾ｎの場合は、２＾Ｚに乗じる係数２＾ｋを次のように決定して初期値の設定を行う。即ち係数２＾ｋは、指数値Ｅｉが偶数の場合、仮数部の範囲２＾０〜２＾ｎの１／４のポイントである２＾（ｎ÷４）を、指数値Ｅｉが奇数の場合、仮数部の範囲２＾０〜２＾ｎの３／４のポイントである２＾（３ｎ÷４）をそれぞれ用いる。これにより、平方根の演算結果により近い初期値を容易に設定でき、上記実施の形態と同様の効果が得られる。
【００２５】
実施の形態３．
上記実施の形態１、２では平方根を演算したが、この実施の形態３では、平方根の逆数である逆平方根の演算について説明する。なお、引数Ｘの逆平方根を演算して演算結果を得るものに限らず、平方根用の演算装置において、逆平方根を演算した後、該逆平方根と引数Ｘを乗じて平方根を演算するようにしても良い。
演算装置１の概略構成は、上記実施の形態１の図１で示したものと同様であり、この場合、演算部２で逆平方根を演算するものとする。
またこの実施の形態では、仮数部の規格範囲を２＾０〜２＾１とし、ニュートン法で用いる逆平方根用の漸化式は、
Ｙｎ＋１＝Ｙｎ＊（３−Ｘ＊（Ｙｎ＾２））＊０．５
とする。
【００２６】
演算装置１による平方根演算の動作の詳細を、図３のフローチャートに基づいて以下に示す。
まず、制御部４は、演算対象として引数Ｘを設定し、演算部２に対し逆平方根演算を要求する（ＳＳ１）。次いで、演算部２は記憶部３から逆平方根演算手順を読み出し（ＳＳ２）、続いて演算部２にて、以下のステップ（ＳＳ３〜ＳＳ１２）に示す逆平方根演算を実行する。
引数Ｘが正の実数であるかを判定し（ＳＳ３）、引数Ｘが正の実数で無ければ逆平方根演算できない範囲であることから、演算結果Ｙに任意の特異値、例えばIEEE754に規定されている値を設定する（ＳＳ４）。
ステップＳＳ３において、引数Ｘが正の実数の場合、引数Ｘから指数値の読み出しコマンドｆｒｅｘｐで指数値Ｅｉを取り出し（ＳＳ５）、（Ｅｉ÷２）の整数部Ｚを取り出す（ＳＳ６）。
【００２７】
次に上記漸化式に代入する初期値Ｉｎｉｔを算出するが、上記実施の形態１で初期値とした値を所定値Ａとして同様に設定し、初期値Ｉｎｉｔを所定値Ａの逆数とする。即ち、
Ａ＝（２＾Ｅｒ）＊（２＾Ｚ）
ここで、２＾Ｚに乗じる係数２＾Ｅｒは、仮数部の範囲２＾０〜２＾１内の数値２＾ｋとなる係数であり、ここではＥｒ＝０．５である中央値２＾０．５を用いる。実際には、以下の値を予め設定して用いる。
２＾Ｅｒ＝１．４１４２１３５・・・
図中のフローチャートでは、係数２＾Ｅｒを仮数部、２＾Ｚを指数部とみなして、仮数部と指数部を結合するコマンドｌｄｅｘｐを使用して、
Ａ＝ｌｄｅｘｐ（（２＾Ｅｒ），Ｚ）
として所定値Ａを設定し、そして、
Ｉｎｉｔ＝１÷Ａ
として初期値を算出する（ＳＳ７）。
【００２８】
次に、ステップＳＳ７において算出した値Ｉｎｉｔを逆平方根用の上記漸化式の近似値Ｙｒｅｆの初期値として設定する（ＳＳ８）。
次に、逆平方根の近似値Ｙｒｅｆを前回値Ｙｏｌｄとして保管しておき（ＳＳ９）、漸化式を使用して逆平方根の近似値Ｙｒｅｆの今回値を、
Ｙｒｅｆ＝Ｙｏｌｄ＊（３−Ｘ＊（Ｙｏｌｄ＾２））＊０．５
として算出する（ＳＳ１０）。
次に、逆平方根の近似値（今回値）Ｙｒｅｆと前回値Ｙｏｌｄとを比較し（ＳＳ１１）、比較結果が異なれば、ステップＳＳ９に戻る。また、比較結果が一致していれば近似値Ｙｒｅｆが真の値に到達したと判断し、Ｙｒｅｆを逆平方根の演算結果Ｙとする（ＳＳ１２）。
そして、演算部２は演算結果をバッファ６に保管したのち、演算完了を制御部４に知らせる。
【００２９】
この実施の形態では、逆平方根を演算するのに、上記実施の形態１の平方根用の初期値を所定値Ａとして該Ａの逆数を初期値として設定する。このため、初期値の設定は、上記実施の形態１と同様に、演算結果Ｙに近い初期値を容易に設定できる。また、繰り返して用いる漸化式が、平方根用のように除算（Ｘ÷Ｙｎ）を含まないため、演算がより容易で高速になる。それ以外は、上記実施の形態１と同様の効果が得られる。即ち、初期値設定用のテーブル用のメモリを要することなく、容易に適切に初期値を設定することができ、メモリの消費量や演算負荷が小さく、小型で消費電力が小さく安価な構成で、高速、高精度に平方根を演算することが可能な演算装置１が得られる。これにより、設置スペース、供給電力、冷却といった物理的な制約が存在する組み込み用装置内に搭載するのに適した演算装置１を提供できる。
【００３０】
なお、この実施の形態においても、仮数部の範囲が２＾０〜２＾ｎの場合は、２＾Ｚに、仮数部の範囲２＾０〜２＾ｎ内の中央値２＾（ｎ÷２）を係数として乗じた値を所定値Ａとする。また、２＾Ｚに乗じる係数は、仮数部の範囲２＾０〜２＾ｎ内の数値２＾ｋであれば中央値以外の数値でも良い。
また、この実施の形態においても、上記実施の形態２と同様に、指数値Ｅｉが偶数の場合と奇数の場合とで分けて漸化式に代入する初期値をそれぞれ設定すると、演算サイクル数を低減できる。
【００３１】
実施の形態４．
IEEE754においては非正規化数の指数部は０で表現されるもので、上記実施の形態１〜３では、引数Ｘが非正規化数の場合も、そのまま演算を行ったが、この実施の形態では、引数Ｘが非正規化数の場合は、正規化数の範囲に移動させる補正を行った後に、平方根（逆平方根）の演算を行う。
演算装置１の概略構成は、上記実施の形態１の図１で示したものと同様であり、この場合、演算部２では、上記実施の形態１と同様に平方根を演算するものとする。
またこの実施の形態では、仮数部の規格範囲を２＾０〜２＾１とし、ニュートン法で用いる平方根用の漸化式は、上記実施の形態１と同様である。
【００３２】
上記実施の形態１と同様に、制御部４は、バッファ５に平方根演算対象である引数を設定し、引数の平方根演算を演算部２に要求する。演算部２は、平方根演算の要求を受け付けると、記憶部３から平方根演算手順を読み出し、引数の平方根演算を実行する。続いて演算部２は平方根演算結果をバッファ６に保管したのち、演算完了を制御部４に知らせる。制御部４は演算完了の知らせを受け取ると、バッファ６から演算結果を取得する。
【００３３】
演算装置１による平方根演算の動作の詳細を、図４のフローチャートに基づいて以下に示す。
まず、制御部４は、演算対象として引数Ｘを設定し、演算部２に対し平方根演算を要求する（Ｔ１）。次いで、演算部２は記憶部３から平方根演算手順を読み出し（Ｔ２）、続いて演算部２にて、以下のステップ（Ｔ３〜Ｔ１０）に示す平方根演算を実行する。
引数Ｘが正の実数であるかを判定し（Ｔ３）、引数Ｘが正の実数で無ければ平方根演算できない範囲であることから、演算結果Ｙに任意の特異値、例えばIEEE754に規定されている値を設定する（Ｔ４）。
ステップＴ３において、引数Ｘが正の実数の場合、引数Ｘが非正規化数であるかを判定し（Ｔ５）、非正規化数で無い場合、即ち引数Ｘが正規化数の場合、演算結果を本来の平方根位置に戻すための係数Ｒｙを１に設定し（Ｔ６）、ステップＴ９に移る。
【００３４】
ステップＴ５において、引数Ｘが非正規化数の場合、演算対象を正規化数の範囲に移動するために、係数Ｋ＾２を乗じて補正する。即ち、Ｘ＊（Ｋ＾２）を新たに演算対象Ｘとする。なお、Ｋは２＾ｍとし、係数Ｋ＾２には、正規化数に移動できる２＾２ｍとなる任意の値を設定すればよい（Ｔ７）。続いて、平方根演算後に演算結果を本来の平方根位置に戻すための係数ＲｙをＲｙ＝（Ｋ＾（−１））として設定する。なお、（Ｋ＾（−１））は２＾（−ｍ）となる（Ｔ８）。
【００３５】
次に、上記実施の形態１の図２で示した処理であるステップＳ５〜ステップＳ１２を実行して演算結果を得る（Ｔ９）。
即ち、引数Ｘから指数値の読み出しコマンドｆｒｅｘｐで指数値Ｅｉを取り出し（Ｓ５）、（Ｅｉ÷２）の整数部Ｚを取り出す（Ｓ６）。そして、上記漸化式に代入する初期値Ｉｎｉｔを、
Ｉｎｉｔ＝（２＾０．５）＊（２＾Ｚ）
として設定し（Ｓ７）、算出した値Ｉｎｉｔを漸化式の近似値Ｙｒｅｆの初期値として設定する（Ｓ８）。次に、平方根の近似値Ｙｒｅｆを前回値Ｙｏｌｄとして保管しておき（Ｓ９）、漸化式を使用して平方根の近似値Ｙｒｅｆの今回値を、
Ｙｒｅｆ＝０．５＊（Ｙｏｌｄ＋Ｘ÷Ｙｏｌｄ）
として算出する（Ｓ１０）。次に、平方根の近似値（今回値）Ｙｒｅｆと前回値Ｙｏｌｄとを比較し（Ｓ１１）、比較結果が異なれば、ステップＳ９に戻る。また、比較結果が一致していれば近似値Ｙｒｅｆが真の値に到達したと判断し、Ｙｒｅｆを平方根の演算結果Ｙとする（Ｓ１２）。
この後、平方根の演算結果Ｙに対し、本来の平方根位置に戻すための係数Ｒｙを乗じて平方根を得る（Ｔ１０）。
【００３６】
この実施の形態では、引数Ｘが正規化数のときは、上記実施の形態１と同様の演算を行う。また、引数Ｘが非正規化数のときは、該引数Ｘに所定の係数２＾(２ｍ)を乗じて正規化数の範囲に移動させる補正を行った後に、指数値Ｅｉを抽出して上記実施の形態１と同様の演算を行う。そして、漸化式を繰り返し用いた演算結果に所定の係数２＾(−ｍ)を乗じて演算結果を本来の平方根位置に戻す。これにより、引数Ｘが非正規化数の場合も、正規化数の場合と同様に、ｎ−７サイクル以内で演算を完了でき、高速演算が可能になる。また、この場合も、２ｎビットの引数Ｘに対して平方根Ｙは２ｎビット精度を確保できる。
また、上記実施の形態１と同様に、初期値設定用のテーブル用のメモリを要することなく、容易に適切に初期値を設定することができ、メモリの消費量や演算負荷が小さく、小型で消費電力が小さく安価な構成で、高速、高精度に平方根を演算することが可能な演算装置１が得られる。これにより、設置スペース、供給電力、冷却といった物理的な制約が存在する組み込み用装置内に搭載するのに適した演算装置１を提供できる。
【００３７】
なお、この実施の形態においても、仮数部の範囲が２＾０〜２＾ｎの場合は、２＾Ｚに、仮数部の範囲２＾０〜２＾ｎ内の中央値２＾（ｎ÷２）を係数として乗じた値を初期値とする。また、２＾Ｚに乗じる係数は、仮数部の範囲２＾０〜２＾ｎ内の数値２＾ｋであれば中央値以外の数値でも良い。
また、この実施の形態においても、上記実施の形態２と同様に、指数値Ｅｉが偶数の場合と奇数の場合とで分けて漸化式に代入する初期値をそれぞれ設定すると、演算サイクル数を低減できる。
【００３８】
さらに、この実施の形態は上記実施の形態３にも適用できる。その場合、引数Ｘに所定の係数２＾(２ｍ)を乗じて正規化数の範囲に移動させる補正を行った後に、指数値Ｅｉを抽出して上記実施の形態３と同様に逆平方根の演算を行う。そして、漸化式を繰り返し用いた演算結果に所定の係数２＾ｍを乗じて演算結果を本来の平方根位置に戻す。これにより、引数Ｘが非正規化数の場合も、少ない演算サイクル数で、高速演算が可能になる。
【図面の簡単な説明】
【００３９】
【図１】この発明の実施の形態１による演算装置を示す概略構成図である。
【図２】この発明の実施の形態１による演算装置の動作を示すフローチャートである。
【図３】この発明の実施の形態３による演算装置の動作を示すフローチャートである。
【図４】この発明の実施の形態４による演算装置の動作を示すフローチャートである。
【符号の説明】
【００４０】
１  演算装置、２  演算部、Ｅｉ  指数値、Ｘ  引数、Ｙ  演算結果。
【図１】
0004546557.tif 000002
【図２】
0004546557.tif 000003
【図３】
0004546557.tif 000004
【図４】
0004546557.tif 000005