(57)【要約】【課題】ＬＵＴの大きさを指数関数的に増大させることなく、関数と直線の誤差を小さくすることが可能な関数近似値の演算器を提供する。【解決手段】関数のオペランドＸを上位桁ビット列Ｕと下位桁ビット列Ｄに分け、オペランドＸの定義域を上位桁ビット列Ｕに関係付けられた複数の区分に分ける。区分毎に直線で関数を近似する。下位桁ビット列Ｄが基準値ＤＭであるときの直線の値が直線の初期値ｂである。上位桁ビット列Ｕから初期値ｂと直線の傾きａと補正値αを出力する。基準値ＤＭから下位桁ビット列ＤのオフセットΔＸを算出する。下位桁ビット列Ｄの上位ビットに基づいて補正の要否を判定する。補正が必要であれば補正値αに対応する初期値ｂと傾きａに対して補正値αを加算又は減算する。傾きａとオフセットΔＸの積を計算する。初期値ｂと積の和を計算する。【選択図】図７
2005208845.tif 000002
【特許請求の範囲】
【請求項１】
オペランドが上位桁ビット列と下位桁ビット列に分けられ、関数の前記オペランドの定義域を前記上位桁ビット列に関係付けられた複数の区分に分け、前記区分内の基準値において初期値である直線で前記関数を近似し、前記上位桁ビット列のエントリにより前記初期値と前記直線の傾きの少なくとも1つの相対補正値、前記初期値と前記傾きを出力するルックアップテーブルと、
前記基準値に対する前記下位桁ビット列のオフセットを算出するオフセット算出回路と、
前記下位桁ビット列の上位ビットに基づいて補正の要否を判定する補正要否判定回路と、
前記補正が必要であれば、前記相対補正値に基づいた絶対補正値を少なくとも１つの前記初期値と前記傾きに加算又は減算する補正回路と、
前記傾きと前記オフセットの積を計算する乗算回路と、
前記初期値と前記積の和を計算する加算回路を有することを特徴とする関数近似値の演算器。
【請求項２】
オペランドが上位桁ビット列と下位桁ビット列に分けられ、関数の前記オペランドの定義域を前記上位桁ビット列に関係付けられた複数の区分に分け、前記区分内の基準値において初期値である直線で前記関数を近似し、前記上位桁ビット列のエントリにより前記初期値の相対補正値、前記初期値と前記直線の傾きを出力するルックアップテーブルと、
前記基準値に対する前記下位桁ビット列のオフセットを算出するオフセット算出回路と、
前記下位桁ビット列の上位ビットに基づいて補正の要否を判定する補正要否判定回路と、
前記補正が必要であれば前記相対補正値に基づいた絶対補正値を加算又は減算した前記初期値を出力する補正回路と、
前記傾きと前記オフセットの積を計算する乗算回路と、
前記初期値と前記積の和を計算する加算回路を有することを特徴とする関数近似値の演算器。
【請求項３】
前記相対補正値と前記絶対補正値が等しいことを特徴とする請求項２に記載の関数近似値の演算器。
【請求項４】
前記絶対補正値は、前記相対補正値をシフト量として前記オフセットを桁送りしていることを特徴とする請求項２に記載の関数近似値の演算器。
【請求項５】
オペランドが上位桁ビット列と下位桁ビット列に分けられ、関数の前記オペランドの定義域を前記上位桁ビット列に関係付けられた複数の区分に分け、前記区分内の基準値において初期値である直線で前記関数を近似し、前記上位桁ビット列のエントリにより前記直線の傾きの補正値、前記初期値と前記傾きを出力するルックアップテーブルと、
前記基準値に対する前記下位桁ビット列のオフセットを算出するオフセット算出回路と、
前記下位桁ビット列の上位ビットに基づいて補正の要否を判定する補正要否判定回路と、
前記補正が必要であれば、前記補正値を前記傾きに加算又は減算する補正回路と、
前記傾きと前記オフセットの積を計算する乗算回路と、
前記初期値と前記積の和を計算する加算回路を有することを特徴とする関数近似値の演算器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ルックアップテーブル（ＬＵＴ）を用いて関数の近似値を計算する関数近似値の演算器に関する。
【背景技術】
【０００２】
従来のＬＵＴを用いた関数の近似値を計算する演算器での計算の手法を説明する。まず、事前にＬＵＴが用意される。オペランドを上位桁ビット列と下位桁ビット列に分ける。関数のオペランドの定義域を上位桁ビット列に関係付けられた複数の区分に分ける。区分内の基準値において初期値である直線で関数を近似する。上位桁ビット列のエントリにより初期値と直線の傾きを出力するＬＵＴが用意できる。
【０００３】
演算器にオペランドが入力されると、入力されたオペランドの属する区分に対応する初期値と傾きがＬＵＴから出力され、入力されたオペランドの属する区分を近似する直線が決定される。この直線とオペランドから関数近似値が計算される。
【０００４】
関数と直線の誤差は、区分の中央と両端で大きくなる傾向がある。誤差を小さくするためには、区分をより細かく分ければよい。しかし、区分を細かくすると区分の数が増え上位桁ビット列のビット数を増やす必要がある（例えば、特許文献１参照。）。このことにより、ＬＵＴの大きさは指数関数的に増大するため、演算器の回路規模も指数関数的に大きくなる問題がある。
【特許文献１】特開２００１−５８０２号公報（００１３段落）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、上記事情に鑑みてなされたものであり、その目的とするところは、ＬＵＴの大きさを指数関数的に増大させることなく、関数と直線の誤差を小さくすることが可能な関数近似値の演算器を提供することにある。
【課題を解決するための手段】
【０００６】
上記問題点を解決するための本発明第1の特徴は、オペランドが上位桁ビット列と下位桁ビット列に分けられ関数のオペランドの定義域を上位桁ビット列に関係付けられた複数の区分に分け区分内の基準値において初期値である直線で関数を近似し上位桁ビット列のエントリにより初期値と直線の傾きの少なくとも1つの相対補正値初期値と傾きを出力するルックアップテーブルと、基準値に対する下位桁ビット列のオフセットを算出するオフセット算出回路と、下位桁ビット列の上位ビットに基づいて補正の要否を判定する補正要否判定回路と、補正が必要であれば相対補正値に基づいた絶対補正値を少なくとも１つの初期値と傾きに加算又は減算する補正回路と、傾きとオフセットの積を計算する乗算回路と、初期値と積の和を計算する加算回路を有する関数近似値の演算器にある。
【０００７】
本発明の第２の特徴は、オペランドが上位桁ビット列と下位桁ビット列に分けられ関数のオペランドの定義域を上位桁ビット列に関係付けられた複数の区分に分け区分内の基準値において初期値である直線で関数を近似し上位桁ビット列のエントリにより初期値の相対補正値初期値と直線の傾きを出力するルックアップテーブルと、基準値に対する下位桁ビット列のオフセットを算出するオフセット算出回路と、下位桁ビット列の上位ビットに基づいて補正の要否を判定する補正要否判定回路と、補正が必要であれば相対補正値に基づいた絶対補正値を加算又は減算した初期値を出力する補正回路と、傾きとオフセットの積を計算する乗算回路と、初期値と積の和を計算する加算回路を有する関数近似値の演算器にある。
【０００８】
本発明の第３の特徴は、オペランドが上位桁ビット列と下位桁ビット列に分けられ関数のオペランドの定義域を上位桁ビット列に関係付けられた複数の区分に分け区分内の基準値において初期値である直線で関数を近似し上位桁ビット列のエントリにより直線の傾きの補正値初期値と傾きを出力するルックアップテーブルと、基準値に対する下位桁ビット列のオフセットを算出するオフセット算出回路と、下位桁ビット列の上位ビットに基づいて補正の要否を判定する補正要否判定回路と、補正が必要であれば補正値を傾きに加算又は減算する補正回路と、傾きとオフセットの積を計算する乗算回路と、初期値と積の和を計算する加算回路を有する関数近似値の演算器にある。
【発明の効果】
【０００９】
本発明によれば、ＬＵＴの大きさを指数関数的に増大させることなく、関数と直線の誤差を小さくすることが可能な関数近似値の演算器を提供できる。
【発明を実施するための最良の形態】
【００１０】
次に、図面を参照して、本発明の実施の形態について説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。また、図面は模式的なものであり、厚みと平面寸法との関係、各層の厚みの比率等は現実のものとは異なることに留意すべきである。
【００１１】
比較例の関数近似値の演算器８は、図１に示すように、ＬＵＴとオフセット算出回路９と乗算回路１０と加算回路１１を有している。ＬＵＴは、ＬＵＴ１とＬＵＴ２を有している。ＬＵＴは、図２に示すように、デコーダ２、信号線３とメモリセルアレイ４を有している。
【００１２】
図３に示すように、ステップＳ１において、演算器８の外部のレジスタ５にオペランドＸがｎビットの２進数で与えられる。オペランドＸは、ｍビットの上位桁ビット列Ｕとｎ−ｍビットの下位桁ビット列Ｄに分けられる。図４に示すように、関数ｙ＝ｆ（ｘ）のオペランドＸの定義域を上位桁ビット列Ｕに関係付けられた複数の区分Ｃに分ける。ｍビットの上位桁ビット列Ｕによって、定義域は２ｍ個の区分Ｃ０乃至Ｃ２ｍ−１に分割することができる。区分Ｃ０乃至Ｃ２ｍ−１毎に直線で関数を近似する。以下、理解が容易なようにｍ＝３の場合について説明する。図５に示すように、各区分Ｃ０乃至Ｃ７に対応する上位桁ビット列Ｕ０乃至Ｕ７毎に、オペランドＸの下位桁ビット列Ｄが基準値ＤＭであるときの直線の値を初期値ｂ０乃至ｂ７としてＬＵＴ１が保持する。同様に、各区分Ｃ０ないしＣ７に対応する上位桁ビット列Ｕ０乃至Ｕ７毎に、直線の傾きａ０乃至ａ７をＬＵＴ２が保持する。
【００１３】
図３のステップＳ２で、ＬＵＴ１は、上位桁ビット列Ｕを入力し初期値ｂを出力する。ステップＳ３で、ＬＵＴ２は、上位桁ビット列Ｕを入力し傾きａを出力する。
【００１４】
ステップＳ４で、オフセット算出回路９が、オペランドＸの下位桁ビット列Ｄの基準値ＤＭからの差分であるオフセットΔＸを計算する。すなわち、オフセットΔＸとは、オペランドＸと基準点との差のことである。
【００１５】
ステップＳ５で、乗算回路１０が、オフセットΔＸと傾きａの積ａΔＸを計算する。
【００１６】
ステップＳ６で、加算回路１１が、積ａΔＸと初期値ｂの和である演算結果Ｙを計算し、レジスタ６に出力する。ステップＳ７で、レジスタ６に演算結果Ｙが設定される。
【００１７】
次に、比較例の実施サンプルを説明する。図５に示すように、上位桁ビット列Ｕ０乃至Ｕ７と、区分Ｃ０乃至Ｃ７は一対一に対応している。区分Ｃ０乃至Ｃ７の内部では、Ｄ０のように同一の下位桁ビット列Ｄが同じ順番に配置されている。このことから、上位桁ビット列Ｕは、オペランドＸが属する区分Ｃ０乃至Ｃ７を表し、オペランドＸは区分Ｃ３に属することがわかる。また、関数ｙ＝ｆ（ｘ）において、オペランドＸが入力されると、精密解Ｙ０が存在することがわかる。
【００１８】
下位桁ビット列Ｄは、オペランドＸの属する区分Ｃ０乃至Ｃ７内での位置を表し、図６に示すように、演算結果Ｙは、オペランドＸが属する区分Ｃ３のみを考慮すればよい。
【００１９】
基準値ＤＭとしては各区分Ｃ０乃至Ｃ７内の点、たとえば各区分Ｃ０乃至Ｃ７の中点Ｍを選択する。
【００２０】
ステップＳ２で、ＬＵＴ１は、オペランドＸの上位桁ビット列Ｕ３を入力し初期値ｂ３を出力する。
【００２１】
ステップＳ３で、ＬＵＴ２は、上位桁ビット列Ｕ３を入力し、傾きａ３を出力する。初期値ｂ３と傾きａ３が表す直線が直線Ｌ３である。
【００２２】
ステップＳ４で、オペランドＸの下位桁ビット列Ｄの基準値ＤＭからの差分であるオフセットΔＸを計算する。
【００２３】
ステップＳ５で、オフセットΔＸと傾きａ３の積ａ３ΔＸを計算する。
【００２４】
ステップＳ６で、積ａ３ΔＸと初期値ｂ３の和である演算結果Ｙ（＝ａ３ΔＸ＋ｂ３）を計算し、レジスタ６に出力する。
【実施例１】
【００２５】
実施例１に係る演算器８は、図７に示すように、ＬＵＴ０と、オフセット算出回路９と、乗算回路１０と、加算回路１１と、補正要否判定回路１３と、補正回路２３を有している。図８に示すように、ＬＵＴ０は、デコーダ２、信号線３とメモリセルアレイ４を有している。ＬＵＴ０は、上位桁ビット列Ｕを入力し、初期値ｂ、傾きａ、傾きａの補正値αを出力する。
【００２６】
ＬＵＴ０は、上位桁ビット列Ｕを入力し初期値ｂを出力するＬＵＴ１、上位桁ビット列Ｕを入力し傾きａを出力するＬＵＴ２と、上位桁ビット列Ｕを入力し傾きａの補正値αを出力するＬＵＴ３を有しているとみなすことができる。図９のステップＳ２で、ＬＵＴ１は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、初期値ｂ１０乃至ｂ１７を出力する。ステップＳ３で、ＬＵＴ２は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、傾きａ１０乃至ａ１７を出力する。ステップＳ１１で、ＬＵＴ３は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、補正値α１０乃至α１７を出力する。区分Ｃ内においては、傾きａを補正する補正値αは、傾きａに比べ小さいと考えられる。このことにより、ＬＵＴ０の大きさを指数関数的に増大させることなく、関数と直線の誤差を小さくできる。
【００２７】
補正要否判定回路１３は、区分Ｃ０乃至Ｃ７の中を、左半分を補正しない範囲として、右半分を補正する範囲として分割する場合には、バッファ１４を有する。なお、バッファ１４は一例にすぎず、区分Ｃ０乃至Ｃ７の中を分割する補正しない範囲と補正する範囲に応じた論理回路を、補正要否判定回路１３は有することができる。たとえば、バッファ１４は、ステップＳ１２で、オペランドＸの下位桁ビット列Ｄの最上位ビットＸｎ−ｍを入力し、補正信号Ｓを出力する。下位桁ビット列Ｄの最上位ビットＸｎ−ｍが０の時、補正無しを意味する０が補正信号Ｓとして出力される。最上位ビットＸｎ−ｍが１の時、補正有りを意味する１が補正信号Ｓとして出力される。
【００２８】
補正回路２３は、補正信号Ｓを入力する。補正信号Ｓが補正有りを意味し補正が必要であれば、補正回路２３は、傾きａに対して、補正値αを加算又は減算し、傾きａを補正する。補正回路２３は、補正された傾きａｃを出力する。補正信号Ｓが補正無しを意味し補正が不要であれば、補正回路２３は、傾きａを補正することなく出力する。補正回路２３は、加減算器１５と選択回路１６を有する。ステップＳ１３で、加減算器１５は、傾きａに対して補正値αを加算又は減算し、補正された傾きａｃを出力する。ステップＳ１４で、選択回路１６は、補正が必要であれば、補正された傾きａｃを選択し出力する。選択回路１６は、補正が不要であれば、傾きａを選択し出力する。
【００２９】
ステップＳ４で、オフセット算出回路９は、基準値ＤＭに対する下位桁ビット列ＤのオフセットΔＸを算出する。
【００３０】
ステップＳ５で、乗算回路１０は、傾きａ又は補正された傾きａｃを入力する。乗算回路１０は、傾きａ又は補正された傾きａｃとオフセットΔＸの積ａΔＸ又はａｃΔＸを計算する。
【００３１】
ステップＳ６で、加算回路１１は、初期値ｂと積ａΔＸ又はａｃΔＸの和を計算する。加算回路１１は、演算結果Ｙとして、和ａΔＸ＋ｂ又はａｃΔＸ＋ｂを出力する。
【００３２】
次に、実施例１の実施サンプルを説明する。上位桁ビット列Ｕのビット数ｍが３ビットの場合について説明する。オペランドＸ１、Ｘ２はそれぞれある区分に存在する。オペランドＸ１は、補正を必要としないオペランドＸであるとして説明する。オペランドＸ２は、補正を必要とするオペランドＸであるとして説明する。図５と同様に、オペランドＸの定義域は２３個の区分Ｃ０乃至Ｃ７に分割することができる。上位桁ビット列Ｕ０乃至Ｕ７と、区分Ｃ０乃至Ｃ７は一対一に対応する。区分Ｃ０乃至Ｃ７の内部では、Ｄ０のように同一の下位桁ビット列Ｄが同じ順番に配置される。このことから、上位桁ビット列Ｕは、オペランドＸが属する区分Ｃ０乃至Ｃ７を表し、オペランドＸ１とＸ２は区分Ｃ３に属することがわかる。また、関数ｙ＝ｆ（ｘ）において、オペランドＸ１とＸ２が入力されると、精密解Ｙ０１とＹ０２が存在することがわかる。
【００３３】
下位桁ビット列Ｄ１とＤ２は、オペランドＸ１とＸ２の属する区分Ｃ０乃至Ｃ７内での位置を表し、図１０に示すように、オペランドＸ１とＸ２が区分Ｃ３に属することがわかる。
【００３４】
基準値ＤＭとしては各区分Ｃ０乃至Ｃ７内の点、たとえば各区分Ｃ０乃至Ｃ７の中点Ｍを選択する。なお、オペランドＸの下位（ｎ−ｍ−１）ビット、もしくは、区分Ｃの幅の１／２とオペランドＸの下位（ｎ−ｍ−１）ビットの差をオフセットΔＸとしてもよい。
【００３５】
図９のステップＳ２で、ＬＵＴ１は、オペランドＸ１とＸ２の上位桁ビット列Ｕ３（０１１）を入力し初期値ｂ１３を出力する。
【００３６】
ステップＳ３で、ＬＵＴ２は、オペランドＸ１とＸ２の上位桁ビット列Ｕ３（０１１）を入力し傾きａ１３を出力する。初期値ｂ１３と傾きａ１３が表す直線が直線Ｌ３ｌである。
【００３７】
ステップＳ１１で、ＬＵＴ３は、オペランドＸ１とＸ２の上位桁ビット列Ｕ３（０１１）を入力し補正値α１３を出力する。傾きａ１３を補正値α１３で補正した傾きが補正した傾きａｃであり、補正した直線が直線Ｌ３ｒである。
【００３８】
ステップＳ１２で、補正要否判定回路１３は、オペランドＸ１とＸ２の下位桁ビット列Ｄ１とＤ２の最上位ビットＸｎ−ｍを入力し、補正信号Ｓを出力する。図１０に示すように、オペランドＸ１の下位桁ビット列Ｄ１の最上位ビットＸｎ−ｍは０であるので、補正無しを意味する０が補正信号Ｓとして出力される。オペランドＸ２の下位桁ビット列Ｄ２の最上位ビットＸｎ−ｍは１であるので、補正有りを意味する１が補正信号Ｓとして出力される。
【００３９】
ステップＳ１３で、加減算器１５は、傾きａ１３に対して補正値α１３を加算又は減算し、補正された傾きａｃ（＝ａ１３＋α１３）を出力する。
【００４０】
ステップＳ１４で、選択回路１６は、オペランドＸ１については補正が不要であるので、傾きａ１３を選択し出力する。選択回路１６は、オペランドＸ２については補正が必要であるので、補正された傾きａｃを選択し出力する。
【００４１】
ステップＳ４で、オフセット算出回路９は、オペランドＸ１について、オペランドＸ１の下位桁ビット列Ｄ１の基準値ＤＭからの差分であるオフセットΔＸ１を計算する。オフセット算出回路９は、オペランドＸ２について、オペランドＸ２の下位桁ビット列Ｄ２の基準値ＤＭからの差分であるオフセットΔＸ２を計算する。
【００４２】
ステップＳ５で、乗算回路１０は、オペランドＸ１について、オフセットΔＸ１と傾きａ１３の積ａ１３ΔＸ１を計算する。乗算回路１０は、オペランドＸ２について、オフセットΔＸ２と補正した傾きａｃ（＝ａ１３＋α１３）の積（ａ１３＋α１３）ΔＸ２を計算する。
【００４３】
ステップＳ６で、加算回路１１が、オペランドＸ１について、積ａ１３ΔＸ１と初期値ｂ１３の和である演算結果Ｙ１（＝ａ１３ΔＸ１＋ｂ１３）を計算し、レジスタ６に出力する。加算回路１１が、オペランドＸ２について、積（ａ１３＋α１３）ΔＸ２と初期値ｂ１３の和である演算結果Ｙ２（＝（ａ１３＋α１３）ΔＸ２＋ｂ１３）を計算し、レジスタ６に出力する。
【００４４】
実施例１では、オペランドＸ１とＸ２の下位桁ビット列Ｄ１とＤ２の上位ビットＸｎ−ｍから補正の要否を判別し、補正が必要な場合には初期値ｂ１０乃至ｂ１７および傾きａ１０乃至ａ１７に対し補正をかけることにより、大幅な回路の増加を伴わずに高精度の近似値を得ることができる。ＬＵＴ０のエントリ数２ｍ個を増加させることなく簡単な回路の付加のみによって近似値の精度を上げることができる。逆に、近似値の精度が同じであれば、実施例１は従来の技術に対して回路面積を削減できる。
【００４５】
なお、初期値ｂ１３と傾きａ１３による直線は、直線Ｌ３ｌである。基準値ＤＭに対応する中点Ｍで二分された区分Ｃ３の左側半分の範囲において、直線と関数ｆ（ｘ）の誤差が最小になるように、初期値ｂ１３と傾きａ１３は予め設定されている。要否判定回路１３は、オペランドＸ１とＸ２の下位桁ビット列Ｄ１とＤ２の上位ビットＸｎ−ｍが、基準値ＤＭに対応する中点Ｍで二分された区分Ｃ３の右側半分の範囲に相当する時のみ補正が必要と判定する。補正値αは、初期値ｂを固定したまま傾きａを補正し、直線は、直線Ｌ３ｌから直線Ｌ３ｒに補正される。補正値αは、区分Ｃ３の右側半分の範囲において、直線Ｌ３ｒを表す補正された直線と関数ｆ（ｘ）の誤差が小さくなるように、補正値α１３が予め設定されている。
【００４６】
すなわち、中点Ｍをはさむ左右のそれぞれの範囲について、誤差が小さくなる傾きａ１３とａｃを算出し、傾きａ１３をＬＵＴ２に保存する。傾きａｃと傾きａ１３の差を補正値αとしてＬＵＴ３に保存する。目的とする関数ｆ（ｘ）にもよるが、通常、隣接した範囲についての傾きａの差は小さいため、補正値αの桁数は傾きａの桁数に比べ小さくすることが出来る。補正値αのＬＵＴ３の占有面積は、傾きａのＬＵＴ２の占有面積に比べ小さくすることが出来る。
【実施例２】
【００４７】
実施例２に係る演算器８は、図１１に示すように、ＬＵＴ０と、オフセット算出回路９と、乗算回路１０と、加算回路１１と、補正要否判定回路１３と、補正回路２３を有している。
【００４８】
ＬＵＴ０は、ＬＵＴ１、ＬＵＴ２、ＬＵＴ３とＬＵＴ４を有している。図１２のステップＳ２で、ＬＵＴ１は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、初期値ｂ２０乃至ｂ２７を出力する。ステップＳ３で、ＬＵＴ２は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、傾きａ２０乃至ａ２７を出力する。ステップＳ１１で、ＬＵＴ３は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、補正値α２０乃至α２７を出力する。ステップＳ１５で、ＬＵＴ４は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、補正値β２０乃至β２７を出力する。初期値ｂを補正する補正値βは、初期値ｂに比べ小さい。このことにより、ＬＵＴ０の大きさを指数関数的に増大させることなく、関数と直線の誤差を小さくできる。
【００４９】
補正要否判定回路１３は、区分Ｃ０乃至Ｃ７の中を、左半分を補正しない範囲として、右半分を補正する範囲として分割する場合には、バッファ１４を有する。なお、バッファ１４は一例にすぎず、区分Ｃ０乃至Ｃ７の中を分割する補正しない範囲と補正する範囲に応じた論理回路を、補正要否判定回路１３は有することができる。たとえば、バッファ１４は、ステップＳ１２で、オペランドＸの下位桁ビット列Ｄの最上位ビットＸｎ−ｍを入力し、補正信号Ｓを出力する。補正要否判定回路１３は、実施例１と同じように機能する。
【００５０】
補正回路２３は、補正信号Ｓを入力する。補正信号Ｓが補正有りを意味し補正が必要であれば、補正回路２３は、傾きａに補正値αを加算又は減算し、傾きａを補正する。補正回路２３は補正された傾きａｃを出力する。補正信号Ｓが補正無しを意味し補正が不要であれば、補正回路２３は、傾きａを補正することなく出力する。
【００５１】
補正信号Ｓが補正有りを意味し補正が必要であれば、補正回路２３は、初期値ｂに補正値βを加算又は減算し、初期値ｂを補正する。補正回路２３は補正された初期値ｂｃを出力する。補正信号Ｓが補正無しを意味し補正が不要であれば、補正回路２３は初期値ｂを補正することなく出力する。補正回路２３は、加減算器１５、１７と選択回路１６、１８を有する。ステップＳ１３で、加減算器１５は、傾きａに補正値αを加算又は減算し、補正された傾きａｃを出力する。ステップＳ１４で、選択回路１６は、補正が必要であれば、補正された傾きａｃを選択し出力する。選択回路１６は、補正が不要であれば、傾きａを選択し出力する。ステップＳ１６で、加減算器１７は、初期値ｂに対して補正値βを加算又は減算し、補正された初期値ｂｃを出力する。ステップＳ１７で、選択回路１８は、補正が必要であれば、補正された初期値ｂｃを選択し出力する。選択回路１８は、補正が不要であれば、初期値ｂを選択し出力する。
【００５２】
ステップＳ４で、オフセット算出回路９は、基準値ＤＭに対する下位桁ビット列ＤのオフセットΔＸを算出する。
【００５３】
ステップＳ５で、乗算回路１０は、傾きａ又は補正された傾きａｃを入力する。乗算回路１０は、傾きａ又は補正された傾きａｃとオフセットΔＸの積ａΔＸ又はａｃΔＸを計算する。
【００５４】
ステップＳ６で、加算回路１１は、初期値ｂ又は補正された初期値ｂｃと積ａΔＸ又はａｃΔＸの和を計算する。加算回路１１は、演算結果Ｙとして、和ａΔＸ＋ｂ又はａｃΔＸ＋ｂｃを出力する。
【００５５】
次に、実施例２の実施サンプルを説明する。上位桁ビット列Ｕのビット数ｍが３ビットの場合について説明する。オペランドＸ１、Ｘ２はそれぞれある区分に存在する。オペランドＸ１は、補正を必要としないオペランドＸであるとして説明する。オペランドＸ２は、補正を必要とするオペランドＸであるとして説明する。図５と同様に、オペランドＸの定義域は２３個の区分Ｃ０乃至Ｃ７に分割することができる。上位桁ビット列Ｕ０乃至Ｕ７と、区分Ｃ０乃至Ｃ７は一対一に対応する。区分Ｃ０乃至Ｃ７の内部では、Ｄ０のように同一の下位桁ビット列Ｄが同じ順番に配置される。このことから、上位桁ビット列Ｕは、オペランドＸが属する区分Ｃ０乃至Ｃ７を表し、図１３に示すように、オペランドＸ１とＸ２は区分Ｃ３に属することがわかる。また、関数ｙ＝ｆ（ｘ）において、オペランドＸ１とＸ２が入力されると、精密解Ｙ０１とＹ０２が存在することがわかる。
【００５６】
下位桁ビット列Ｄ１とＤ２は、オペランドＸ１とＸ２の属する区分Ｃ０乃至Ｃ７内での位置を表し、図１３に示すように、オペランドＸ１とＸ２が区分Ｃ３に属することがわかる。
【００５７】
基準値ＤＭとしては各区分Ｃ０乃至Ｃ７内の点、たとえば各区分Ｃ０乃至Ｃ７の中点Ｍを選択する。
【００５８】
図１２のステップＳ２で、ＬＵＴ１は、オペランドＸ１とＸ２の上位桁ビット列Ｕ３（０１１）を入力し、初期値ｂ２３を出力する。
【００５９】
ステップＳ３で、ＬＵＴ２は、オペランドＸ１とＸ２の上位桁ビット列Ｕ３（０１１）を入力し、傾きａ２３を出力する。初期値ｂ２３と傾きａ２３が表す直線が直線Ｌ３ｌである。
【００６０】
ステップＳ１１で、ＬＵＴ３は、オペランドＸ１とＸ２の上位桁ビット列Ｕ３（０１１）を入力し、補正値α２３を出力する。傾きａ２３を補正値α２３で補正した傾きが、補正した傾きａｃである。
【００６１】
ステップＳ１５で、ＬＵＴ４は、オペランドＸ１とＸ２の上位桁ビット列Ｕ３（０１１）を入力し、補正値β２３を出力する。初期値ｂ２３を補正値β２３で補正した傾きが、補正した初期値ｂｃである。補正した傾きａｃと補正した初期値ｂｃによる補正した直線が直線Ｌ３ｒである。
【００６２】
ステップＳ１２で、補正要否判定回路１３は、オペランドＸ１とＸ２の下位桁ビット列Ｄ１とＤ２の最上位ビットＸｎ−ｍを入力し、補正信号Ｓを出力する。図１３に示すように、オペランドＸ１の下位桁ビット列Ｄ１の最上位ビットＸｎ−ｍは０であるので、補正無しを意味する０が補正信号Ｓとして出力される。オペランドＸ２の下位桁ビット列Ｄ２の最上位ビットＸｎ−ｍは１であるので、補正有りを意味する１が補正信号Ｓとして出力される。
【００６３】
ステップＳ１３で、加減算器１５は、傾きａ２３に補正値α２３を加算又は減算し、補正された傾きａｃ（＝ａ２３＋α２３）を出力する。
【００６４】
ステップＳ１４で、選択回路１６は、オペランドＸ１については補正が不要であるので、傾きａ２３を選択し出力する。選択回路１６は、オペランドＸ２については補正が必要であるので、補正された傾きａｃを選択し出力する。
【００６５】
ステップｓ１６で、加減算器１７は、初期値ｂ２３に補正値β２３を加算又は減算し、補正された初期値ｂｃ（＝ｂ２３＋β２３）を出力する。
【００６６】
ステップＳ１７で、選択回路１８は、オペランドＸ１については補正が不要であるので、初期値ｂ２３を選択し出力する。選択回路１８は、オペランドＸ２については補正が必要であるので、補正された初期値ｂｃを選択し出力する。
【００６７】
ステップＳ４で、オフセット算出回路９は、オペランドＸ１について、オペランドＸ１の下位桁ビット列Ｄ１の基準値ＤＭからの差分であるオフセットΔＸ１を計算する。オフセット算出回路９は、オペランドＸ２について、オペランドＸ２の下位桁ビット列Ｄ２の基準値ＤＭからの差分であるオフセットΔＸ２を計算する。
【００６８】
ステップＳ５で、乗算回路１０は、オペランドＸ１について、オフセットΔＸ１と傾きａ２３の積ａ２３ΔＸ１を計算する。乗算回路１０は、オペランドＸ２について、オフセットΔＸ２と補正した傾きａｃ（＝ａ２３＋α２３）の積（ａ２３＋α２３）ΔＸ２を計算する。
【００６９】
ステップＳ６で、加算回路１１が、オペランドＸ１について、積ａ２３ΔＸ１と初期値ｂ２３の和である演算結果Ｙ１（＝ａ２３ΔＸ１＋ｂ２３）を計算し、レジスタ６に出力する。加算回路１１が、オペランドＸ２について、積（ａ２３＋α２３）ΔＸ２と補正された初期値ｂｃ（＝ｂ２３＋β２３）の和である演算結果Ｙ２（＝（ａ１３＋α１３）ΔＸ２＋（ｂ２３＋β２３））を計算し、レジスタ６に出力する。
【００７０】
実施例２では、オペランドＸ１とＸ２の下位桁ビット列Ｄ１とＤ２の上位ビットＸｎ−ｍから補正の要否を判別し、補正が必要な場合には初期値ｂ２０乃至ｂ２７および傾きａ２０乃至ａ２７に対し補正をかけることにより、大幅な回路の増加を伴わずに高精度の近似値を得ることができる。ＬＵＴ０のエントリ数を増加させることなく簡単な回路の付加のみによって近似値の精度を上げることができる。逆に、近似値の精度が同じであれば、実施例２は従来の技術に対して回路面積を削減できる。
【００７１】
なお、初期値ｂ２３と傾きａ２３による直線は、直線Ｌ３ｌである。基準値ＤＭに対応する中点Ｍで二分された区分Ｃ３の左側半分の範囲において、直線と関数ｆ（ｘ）の誤差が小さくなるように、初期値ｂ２３と傾きａ２３は予め設定されている。要否判定回路１３は、オペランドＸ１とＸ２の下位桁ビット列Ｄ１とＤ２の上位ビットＸｎ−ｍが、基準値ＤＭに対応する中点Ｍで二分された区分Ｃ３の右側半分の範囲に相当する時のみ補正が必要と判定する。補正値α、βは、傾きａと初期値ｂを補正し、直線は直線Ｌ３ｌから直線Ｌ３ｒに補正される。区分Ｃ３の右側半分の範囲において、直線Ｌ３ｒを表す補正された直線と関数ｆ（ｘ）の誤差が小さくなるように、補正値α２３、β２３が予め設定されている。
【００７２】
すなわち、中点Ｍをはさむ左右のそれぞれの範囲について、誤差が最小となる傾きａ２３、ａｃと初期値ｂ２３、ｂｃを算出し、初期値ｂ２３をＬＵＴ１に保存し、傾きａ２３をＬＵＴ２に保存する。傾きａｃと傾きａ２３の差を補正値α２３としてＬＵＴ３に保存し、初期値ｂｃと初期値ｂ２３の差を補正値β２３としてＬＵＴ４に保存する。隣接した範囲についての傾きａの差は小さいため、補正値αのＬＵＴ３は傾きａのＬＵＴ２に比べ小さくすることが出来る。同様に、隣接した範囲についての初期値ｂの差は小さいため、補正値βのＬＵＴ４は初期値ｂのＬＵＴ１に比べ小さくすることが出来る。
【実施例３】
【００７３】
実施例３に係る演算器８は、図１４に示すように、ＬＵＴ０と、オフセット算出回路９と、乗算回路１０と、加算回路１１と、補正要否判定回路１３と、補正回路２３を有している。補正要否判定回路１３は、加減判定回路１２を有している。
【００７４】
ＬＵＴ０は、ＬＵＴ１、ＬＵＴ２とＬＵＴ４を有している。図１５のステップＳ２で、ＬＵＴ１は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、初期値ｂ４０乃至ｂ４７を出力する。ステップＳ３で、ＬＵＴ２は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、傾きａ４０乃至ａ４７を出力する。ステップＳ１５で、ＬＵＴ４は、上位桁ビット列Ｕ０乃至Ｕ７を入力し、補正値β４０乃至β４７を出力する。
【００７５】
補正要否判定回路１３は、区分Ｃ０乃至Ｃ７の中を８分割して、両端部と中央部を補正する範囲として、両端部と中央部の間の範囲を補正しない範囲として分割する場合には、排他的論理和の否定回路２０を有する。なお、排他的論理和の否定回路２０は一例にすぎず、区分Ｃ０乃至Ｃ７の中を分割する補正しない範囲と補正する範囲に応じた論理回路を、補正要否判定回路１３は有することができる。たとえば、排他的論理和の否定回路２０は、ステップＳ１２で、オペランドＸの下位桁ビット列Ｄの上２位ビットＸｎ−ｍ−１と上３位ビットＸｎ−ｍ−２を入力し、補正信号Ｓ１を出力する。（Ｘｎ−ｍ−１、Ｘｎ−ｍ−２）が（０、１）と（１、０）の時、補正無しを意味する０が補正信号Ｓ１として出力される。（Ｘｎ−ｍ−１、Ｘｎ−ｍ−２）が（０、０）と（１、１）の時、補正有りを意味する１が補正信号Ｓ１として出力される。
【００７６】
加減判定回路１２は、区分Ｃ０乃至Ｃ７の中を８分割して、両端部を加算により補正する範囲として、中央部を減算により補正する範囲として分割する場合には、排他的論理和の否定回路１９を有する。なお、排他的論理和の否定回路１９は一例にすぎず、区分Ｃ０乃至Ｃ７の中を分割する加算により補正する範囲と減算により補正する範囲に応じた論理回路を、加減判定回路１２は有することができる。たとえば、加減判定回路１２は、ステップＳ１８で、オペランドＸの下位桁ビット列Ｄの最上位ビットＸｎ−ｍと上２位ビットＸｎ−ｍ−１を入力し、加減信号Ｓ２を出力する。（Ｘｎ−ｍ、Ｘｎ−ｍ−１）が（０、１）と（１、０）の時、減算を意味する０が加減信号Ｓ２として出力される。（Ｘｎ−ｍ、Ｘｎ−ｍ−１）が（０、０）と（１、１）の時、加算を意味する１が加減信号Ｓ２として出力される。
【００７７】
補正回路２３は、補正信号Ｓ１と加減信号Ｓ２を入力する。加減信号Ｓ２が加算を意味すれば、補正回路２３は、初期値ｂに対して補正値βを加算し、初期値ｂを補正する。加減信号Ｓ２が減算を意味すれば、補正回路２３は、初期値ｂに対して補正値βを減算し、初期値ｂを補正する。補正信号Ｓ１が補正有りを意味し補正が必要であれば、補正回路２３は、補正された初期値ｂｃを出力する。補正信号Ｓ１が補正無しを意味し補正が不要であれば、補正回路２３は、初期値ｂを補正することなく出力する。補正回路２３は、加減算器１７と選択回路１８を有する。ステップＳ１６で、加減算器１７は、加減信号Ｓ２に基づいて初期値ｂに対して補正値βを加算又は減算し、補正された初期値ｂｃを出力する。ステップＳ１７で、選択回路１８は、補正が必要であれば、補正された初期値ｂｃを選択し出力する。選択回路１８は、補正が不要であれば、初期値ｂを選択し出力する。
【００７８】
ステップＳ４で、オフセット算出回路９は、基準値ＤＭに対する下位桁ビット列ＤのオフセットΔＸを算出する。
【００７９】
ステップＳ５で、乗算回路１０は、傾きａを入力する。乗算回路１０は、傾きａとオフセットΔＸの積ａΔＸを計算する。
【００８０】
ステップＳ６で、加算回路１１は、初期値ｂ又は補正された初期値ｂｃと積ａΔＸの和を計算する。加算回路１１は、演算結果Ｙとして、和ａΔＸ＋ｂ又はａΔＸ＋ｂｃを出力する。
【００８１】
次に、実施例３の実施サンプルを説明する。上位桁ビット列Ｕのビット数ｍが３ビットの場合について説明する。オペランドＸ３、Ｘ４、Ｘ５はそれぞれある区分に存在する。オペランドＸ３は、補正を必要としないオペランドＸであるとして説明する。オペランドＸ４は、減算する補正を必要とするオペランドＸであるとして説明する。オペランドＸ５は、加算する補正を必要とするオペランドＸであるとして説明する。図５と同様に、オペランドＸの定義域は２３個の区分Ｃ０乃至Ｃ７に分割することができる。上位桁ビット列Ｕ０乃至Ｕ７と、区分Ｃ０乃至Ｃ７は一対一に対応する。区分Ｃ０乃至Ｃ７の内部では、Ｄ０のように同一の下位桁ビット列Ｄが同じ順番に配置される。このことから、上位桁ビット列Ｕは、オペランドＸが属する区分Ｃ０乃至Ｃ７を表し、図１６に示すように、オペランドＸ３とＸ４とＸ５は区分Ｃ３に属することがわかる。また、関数ｙ＝ｆ（ｘ）において、オペランドＸ３とＸ４とＸ５が入力されると、精密解Ｙ０３とＹ０４とＹ０５が存在することがわかる。
【００８２】
オペランドＸの下位桁ビット列Ｄは、オペランドＸ３乃至Ｘ５の属する区分Ｃ０乃至Ｃ７内での位置を表す。さらに、図１６に示すように、下位桁ビット列Ｄの上位３ビットＸｎ−ｍ、Ｘｎ−ｍ−１、Ｘｎ−ｍ−２に注目する。上位３ビットＸｎ−ｍ、Ｘｎ−ｍ−１、Ｘｎ−ｍ−２によって、区分Ｃ３をさらに２３個すなわち８個の領域Ｚ０乃至Ｚ７に分割できる。上位３ビット（Ｘｎ−ｍ、Ｘｎ−ｍ−１、Ｘｎ−ｍ−２）の（０、０、０）、（０、０、１）、（０、１、０）、（０、１、１）、（１、０、０）、（１、０、１）、（１、１、０）、（１、１、１）と、領域Ｚ０乃至Ｚ７は一対一に対応する。このことから、上位３ビット（Ｘｎ−ｍ、Ｘｎ−ｍ−１、Ｘｎ−ｍ−２）は、オペランドＸが属する区分Ｚ０乃至Ｚ７を表し、オペランドＸ３とＸ４とＸ５は区分Ｚ１とＺ３とＺ７に属することがわかる。オペランドＸ３、Ｘ４、Ｘ５が区分Ｃ３に属することがわかる。基準値ＤＭとしては各区分Ｃ０乃至Ｃ７内の点、たとえば各区分Ｃ０乃至Ｃ７の中点Ｍを選択する。
【００８３】
図１５のステップＳ２で、ＬＵＴ１は、オペランドＸ３乃至Ｘ５の上位桁ビット列Ｕ３（０１１）を入力し、初期値ｂ４３を出力する。
【００８４】
ステップＳ３で、ＬＵＴ２は、オペランドＸ３乃至Ｘ５の上位桁ビット列Ｕ３（０１１）を入力し、傾きａ４３を出力する。初期値ｂ４３と傾きａ４３が表す直線が直線Ｌ３である。
【００８５】
ステップＳ１５で、ＬＵＴ４は、オペランドＸ３乃至Ｘ５の上位桁ビット列Ｕ３（０１１）を入力し、補正値β４３を出力する。初期値ｂ４３を補正値β４３で加減した初期値が、補正した初期値ｂｃである。補正した初期値ｂｃによる補正した直線が直線Ｌ３＋とＬ３−である。
【００８６】
ステップＳ１２で、補正要否判定回路１３は、オペランドＸの下位桁ビット列Ｄの上２位ビットＸｎ−ｍ−１と上３位ビットＸｎ−ｍ−２を入力し、補正信号Ｓ１を出力する。図１６に示すように、上位３ビット（Ｘｎ−ｍ、Ｘｎ−ｍ−１、Ｘｎ−ｍ−２）が（０、０、０）、（０、１、１）、（１、０、０）、（１、１、１）の時のみ、補正有りを意味する１が補正信号Ｓ１として出力される。オペランドＸが領域Ｚ０、Ｚ３、Ｚ４、Ｚ７に属する場合のみ、補正有りを意味する１が補正信号Ｓ１として出力される。したがって、オペランドＸ３は領域Ｚ１に属すので、補正無しを意味する０が補正信号Ｓ１として出力される。オペランドＸ４とＸ５は領域Ｚ３とＺ７に属すので、補正有りを意味する１が補正信号Ｓ１として出力される。
【００８７】
ステップＳ１８で、加減判定回路１２は、オペランドＸの下位桁ビット列Ｄの最上位ビットＸｎ−ｍと上２位ビットＸｎ−ｍ−１を入力し、加減信号Ｓ２を出力する。図１６に示すように、上位３ビット（Ｘｎ−ｍ、Ｘｎ−ｍ−１、Ｘｎ−ｍ−２）が（０、０、０）、（０、０、１）、（１、１、０）、（１、１、１）の時のみ、加算を意味する１が加減信号Ｓ２として出力される。オペランドＸが領域Ｚ０、Ｚ１、Ｚ６、Ｚ７に属する場合のみ、加算を意味する１が加減信号Ｓ２として出力される。したがって、オペランドＸ３とＸ５は領域Ｚ１とＺ７に属すので、加算を意味する１が加減信号Ｓ２として出力される。オペランドＸ４は領域Ｚ３に属すので、減算を意味する０が加減信号Ｓ２として出力される。
【００８８】
なお、領域Ｚ０乃至Ｚ７について、補正の有無と補正値の加減をまとめて示す。領域Ｚ０とＺ７では、補正が有り、補正値は加算される。領域Ｚ３とＺ４では、補正が有り、補正値は減算される。領域Ｚ１、Ｚ２、Ｚ５とＺ６では、補正が無い。補正無しの場合、補正値は最終的に加減されない。
【００８９】
ステップｓ１６で、加減算器１７は、加減信号Ｓ２に基づいて、初期値ｂ４３に対して補正値β４３を加算又は減算し、補正された初期値ｂｃ（＝ｂ４３＋β４３  ｏｒ  ｂ４３−β４３）を出力する。オペランドＸ３とＸ５は領域Ｚ１とＺ７に属すので、補正された初期値ｂｃ（＝ｂ４３＋β４３）を出力する。オペランドＸ４は領域Ｚ３に属すので、補正された初期値ｂｃ（＝ｂ４３−β４３）を出力する。
【００９０】
ステップＳ１７で、選択回路１８は、オペランドＸ３は領域Ｚ１に属すので、補正が無く、選択回路１８は、初期値ｂ４３を選択し出力する。オペランドＸ４は領域Ｚ３に属すので、補正が有り、選択回路１８は、補正された初期値ｂｃ（＝ｂ４３−β４３）を出力する。オペランドＸ５は領域Ｚ７に属すので、補正が有り、選択回路１８は、補正された初期値ｂｃ（＝ｂ４３＋β４３）を出力する。
【００９１】
ステップＳ４で、オフセット算出回路９は、オペランドＸ３乃至Ｘ５について、オペランドの下位桁ビット列Ｄの基準値ＤＭからの差分であるオフセットΔＸ３乃至ΔＸ５を計算する。
【００９２】
ステップＳ５で、乗算回路１０は、オペランドＸ３乃至Ｘ５について、オフセットΔＸ３乃至ΔＸ５と傾きａ４３の積ａ４３ΔＸ３乃至ａ４３ΔＸ５を計算する。
【００９３】
ステップＳ６で、加算回路１１が、オペランドＸ３について、積ａ４３ΔＸ３と初期値ｂ４３の和である演算結果Ｙ３（＝ａ４３ΔＸ３＋ｂ４３）を計算し、レジスタ６に出力する。加算回路１１が、オペランドＸ４について、積ａ４３ΔＸ４と補正された初期値ｂｃ（＝ｂ４３−β４３）の和である演算結果Ｙ４（＝ａ４３ΔＸ４＋ｂ４３−β４３）を計算し、レジスタ６に出力する。加算回路１１が、オペランドＸ５について、積ａ４３ΔＸ５と補正された初期値ｂｃ（＝ｂ４３＋β４３）の和である演算結果Ｙ５（＝ａ４３ΔＸ５＋ｂ４３＋β４３）を計算し、レジスタ６に出力する。
【００９４】
実施例４では、オペランドＸの下位桁ビット列Ｄの上位ビットＸｎ−ｍ−１、Ｘｎ−ｍ−２から補正の要否を判別し、下位桁ビット列Ｄの上位ビットＸｎ−ｍ、Ｘｎ−ｍ−１から補正の際の補正値の加減を行い、補正が必要な場合には初期値ｂ４０乃至ｂ４７に対し補正値を加減し補正することにより、大幅な回路の増加を伴わずに高精度の近似値を得ることができる。ＬＵＴ０のエントリ数２ｍ個を増加させることなく簡単な回路の付加のみによって近似値の精度を上げることができる。逆に、近似値の精度が同じであれば、実施例３は従来の技術に対して回路面積を削減できる。
【００９５】
なお、初期値ｂ４３と傾きａ４３による直線は、直線Ｌ３である。領域Ｚ１、Ｚ２、Ｚ５とＺ６の範囲において、直線Ｌ３と関数ｆ（ｘ）の誤差が小さくなるように、初期値ｂ４３と傾きａ４３は予め設定されている。領域Ｚ０とＺ７の範囲において、直線Ｌ３＋と関数ｆ（ｘ）の誤差が小さくなるように、初期値ｂｃは予め設定されている。領域Ｚ３とＺ４の範囲において、直線Ｌ３−と関数ｆ（ｘ）の誤差が小さくなるように、初期値ｂｃは予め設定されている。設定された初期値ｂｃから補正値β４３が予め設定されている。隣接した領域Ｚ０乃至Ｚ７についての初期値ｂの差は小さいため、補正値βのＬＵＴ４は初期値ｂのＬＵＴ１に比べ小さくすることが出来る。
【実施例４】
【００９６】
実施例４に係る演算器８は、図１７に示すように、ＬＵＴ０と、オフセット算出回路９と、乗算回路１０と、加算回路１１と、補正要否判定回路１３と、補正回路２３を有している。
【００９７】
ＬＵＴ０は、ＬＵＴ１、ＬＵＴ２とＬＵＴ３を有している。ＬＵＴ１は、ｎビットの入力オペランドＸの上位ｍビットＵ（ｍ＜ｎ）を入力し、上位ｍビットＵに対応する初期値ｂを出力する。ＬＵＴ２は、同じ上位ｍビットＵに対応する傾きａを出力する。ＬＵＴ３は、同じ上位ｍビットＵを入力とし初期値ｂに対する補正量の相対値である補正シフト量ｅを出力する。初期値ｂと傾きａの直線では対象とする関数ｆ（ｘ）との誤差が区分Ｃの端点および中点において大きくなる傾向がある。誤差の大きいこのような範囲において誤差が小さくなるような傾きの値を、ＬＵＴ２に格納されている傾きａとの差分が２のｅ乗となる値２ｅから求める。べき数ｅは、正の数でも負の数でもかまわない。べき数ｅを補正シフト量としてＬＵＴ３に格納する。
【００９８】
補正要否判定回路１３は、入力オペランドＸの下位（ｎ−ｍ）ビットＤの上位数ビットＸｎ−ｍを入力し、補正の要否を判別する。上位数ビットＸｎ−ｍが１ビットであれば、実施例１と２が参考になる。２ビット以上であれば実施例３が参考になる。
【００９９】
オフセット算出回路９は、上位ｍビットＵで指定される定義域Ｃ内の代表値ＤＭと入力オペランドＸとのオフセットΔＸを算出する。
【０１００】
補正回路は、インバータ２２、選択回路１６、シフタ２１と加減算器１５を有する。選択回路１６は、補正要否判定回路１３の出力に従って、オフセット算出回路９から出力されるオフセット値ΔＸ、オフセット値ΔＸの反転と０（ゼロ）の３つの入力のうちから１つを選択し出力する。シフタ２１は、ＬＵＴ３の出力である補正シフト量ｅに従い、選択回路１６の出力をシフトする。シフトは容易な乗算と除算であると考えられる。加減算器１５は、初期値ｂに対してシフタ２１の出力を加減しあるいはそのまま出力する。
【０１０１】
乗算回路１０は、傾きａとオフセット値ΔＸの乗算を行い、積ａΔＸを出力する。
【０１０２】
加算回路１１は、補正回路２３の加減算器１５の出力である補正していない初期値ｂあるいは補正された初期値ｂｃ＋、ｂｃ−と、積ａΔＸを加算する。
【０１０３】
実施例４では、傾きａに補正値２ｅを加えて傾きを補正する。これより、補正前の式１から補正後は式２のようになる。そして、式２は式３のように変形できる。
【０１０４】
Ｙ＝ａΔＸ＋ｂ                    ・・・（１）
Ｙ＝（ａ＋２ｅ）ΔＸ＋ｂ          ・・・（２）
Ｙ＝ａΔＸ＋（２ｅΔＸ＋ｂ）      ・・・（３）
【０１０５】
式３より、傾きａに補正値２ｅを加える補正は、初期値ｂに補正値２ｅΔＸを加える補正とみなせる。補正値２ｅΔＸは、オフセット値ΔＸと傾きａの補正値２ｅの積である。さらに、傾きａが２進数で表されてあれば、積は、べき数ｅのｅ桁だけ傾きａの桁をシフトすることにより求めることができる。
【０１０６】
実際の演算は下記のように行われる。まず、ＬＵＴ１０１、ＬＵＴ１０２、ＬＵＴ１０３は、入力オペランドＸの上位ｍビットＵを入力し、それぞれ上位ｍビットＵに対応する初期値ｂ、傾きａ、補正シフト量ｅを出力する。
【０１０７】
並行して、入力オペランドＸの下位（ｎ−ｍ）ビットＤがオフセット算出回路９に入力され、中点ＭからのオフセットΔＸを出力する。
【０１０８】
また、同時に、補正要否判定回路１３は、入力オペランドＸの下位（ｎ−ｍ）ビットＤの最上位ビットＸｍ−ｎを入力する。下位（ｎ−ｍ）ビットＤを観測することにより、補正の必要な領域か否かを判別し、判別結果に応じて補正信号を出力する。
【０１０９】
選択回路１６は、補正信号に従って、オフセット算出回路９のオフセットΔＸ、オフセットΔＸのインバータ２２による反転と０（ゼロ）のうちの一つを選択する。
【０１１０】
シフタ２１は、選択されたオフセットΔＸ、オフセットΔＸの反転、あるいは、０（ゼロ）を、補正シフト量ｅだけシフトし出力する。このことにより、補正の絶対量が求まる。
【０１１１】
加減算器１５は、シフトしたオフセットΔＸ、オフセットΔＸの反転、あるいは、０（ゼロ）を、初期値ｂに対して加（減）算し出力する。
【０１１２】
乗算回路１０は、加減算と並行して、傾きａとオフセットΔＸを乗算し積を出力する。
【０１１３】
加算回路１１は、加減算器１５の出力と乗算回路１０の出力を加算する。このことにより、最終結果である関数の近似値を得ることができる。
【０１１４】
実施例４によれば、ＬＵＴ０のエントリ数を大きく増加させることなく、かつ、演算時間を増加させることなく近似値の精度を上げることができる。
【図面の簡単な説明】
【０１１５】
【図１】比較例の演算器の構成図である。
【図２】比較例の演算器のＬＵＴ０の構成図である。
【図３】比較例の演算器の演算方法のフローチャートである。
【図４】入力オペランドと演算結果の関係を表すグラフ（その１）である。
【図５】入力オペランドと演算結果の関係を表すグラフ（その２）である。
【図６】比較例の演算器の演算方法の入力オペランドＸと演算結果Ｙの関係を表すグラフである。
【図７】実施例１に係る演算器の構成図である。
【図８】実施例１に係る演算器のＬＵＴ０の構成図である。
【図９】実施例１に係る演算器の演算方法のフローチャートである。
【図１０】実施例１の実施サンプルに係る演算器の演算方法の入力オペランドＸ１、Ｘ２と演算結果Ｙ１、Ｙ２の関係を表すグラフである。
【図１１】実施例２に係る演算器の構成図である。
【図１２】実施例２に係る演算器の演算方法のフローチャートである。
【図１３】実施例２の実施サンプルに係る演算器の演算方法の入力オペランドＸ１、Ｘ２と演算結果Ｙ１、Ｙ２の関係を表すグラフである。
【図１４】実施例３に係る演算器の構成図である。
【図１５】実施例３に係る演算器の演算方法のフローチャートである。
【図１６】実施例３の実施サンプルに係る演算器の演算方法の入力オペランドＸ３、Ｘ４、Ｘ５と演算結果Ｙ３、Ｙ４、Ｙ５の関係を表すグラフである。
【図１７】実施例４に係る演算器の構成図である。
【符号の説明】
【０１１６】
２    デコーダ
３    信号線
４    メモリセルアレイ
５    レジスタ
６    レジスタ
８    演算器
９    オフセット算出回路
１０    乗算回路
１１    加算回路
１２    加減判定回路
１３    補正要否判定回路
１４    バッファ
１５    加減算器
１６    選択回路
１７    加減算器
１８    選択回路
１９    否定排他的論理和
２０    否定排他的論理和
２１    シフタ
２２    インバータ
２３    補正回路
【図１】
2005208845.tif 000003
【図２】
2005208845.tif 000004
【図３】
2005208845.tif 000005
【図４】
2005208845.tif 000006
【図５】
2005208845.tif 000007
【図６】
2005208845.tif 000008
【図７】
2005208845.tif 000009
【図８】
2005208845.tif 000010
【図９】
2005208845.tif 000011
【図１０】
2005208845.tif 000012
【図１１】
2005208845.tif 000013
【図１２】
2005208845.tif 000014
【図１３】
2005208845.tif 000015
【図１４】
2005208845.tif 000016
【図１５】
2005208845.tif 000017
【図１６】
2005208845.tif 000018
【図１７】
2005208845.tif 000019