(57)【要約】【課題】  浮動小数点数の演算の処理量を抑えつつ、精度を向上させる。【解決手段】  第２変換部３２は、関数に応じて定められた指数部の変換規則によって、指数部１２に含まれた指数部を変換する。記憶部３８は、関数に応じて定められた仮数部の変換規則によって、仮数部１４を変換した値をテーブルとして予め記憶する。取得部３４は、仮数部１４を構成する２３ビットから上位８ビットを抽出することによって、テーブルのインデックスを導出する。さらに、取得部３４は、上位８ビットによって近似した仮数部１４に対して１を加え。ふたつ目のインデックスを導出する。導出部３６は、仮の戻り値Ａと仮の戻り値Ｂをそれぞれ導出する。さらに、導出部３６は、仮の戻り値Ａと仮の戻り値Ｂに補間演算を施して関数の戻り値２０８を導出する。【選択図】  図２
2006065633.tif 000002
【特許請求の範囲】
【請求項１】
指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力する入力部と、
関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換する変換部と、
関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値をテーブルとして予め記憶する記憶部と、
入力した引数のうちの少なくとも仮数部を近似することによって、前記記憶部に記憶したテーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、前記記憶部に記憶したテーブルから複数の値をそれぞれ取得する取得部と、
変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力する導出部とを備え、
前記記憶部には、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に１を加えた数が、前記テーブルのインデックスの数として規定されていることを特徴とする演算装置。
【請求項２】
前記変換部は、前記指数部の変換規則として、前記入力した引数に含まれた指数部に加減演算を実行し、
前記取得部は、入力した引数のうちの少なくとも仮数部を近似した値と、当該近似した値に１を加えた値を前記テーブルの複数のインデックスとして導出し、
前記導出部は、前記変換した指数部を使用しつつ、前記取得した複数の値をもとにした補間演算によって、前記関数の戻り値を導出することを特徴とする請求項１に記載の演算装置。
【請求項３】
前記入力部で入力した引数に対応した関数は、引数の逆数の演算であり、
前記記憶部には、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値が、前記テーブルのインデックスとして規定され、
前記取得部は、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値と、当該近似した値に１を加えた値を前記テーブルの複数のインデックスとして導出することを特徴とする請求項２に記載の演算装置。
【請求項４】
前記導出部は、前記取得部で取得した複数の値のそれぞれに対応するように、前記引数と同様の浮動小数点形式で表現されたふたつの仮の戻り値をそれぞれ導出し、前記ふたつの仮の戻り値に補間演算を施して前記関数の戻り値を導出することを特徴とする請求項３に記載の演算装置。
【請求項５】
前記導出部は、前記取得部で取得した複数の値に補間演算を施し、補間演算の結果と前記変換した指数部から、前記関数の戻り値を導出することを特徴とする請求項３に記載の演算装置。
【請求項６】
前記入力部で入力した引数に対応した関数は、引数の平方根の演算であり、
前記記憶部には、引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値が、前記テーブルのインデックスとして規定され、
前記取得部は、入力した引数のうちの指数部の最下位のビット値と、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値と、当該形成された値に１を加えた値を前記テーブルの複数のインデックスとして導出することを特徴とする請求項２に記載の演算装置。
【請求項７】
前記入力部で入力した引数に対応した関数は、引数の平方根の逆数の演算であり、
前記記憶部には、引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値が、前記テーブルのインデックスとして規定され、
前記取得部は、入力した引数のうちの指数部の最下位のビット値と、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値と、当該形成された値に１を加えた値を前記テーブルの複数のインデックスとして導出することを特徴とする請求項２に記載の演算装置。
【請求項８】
前記変換部は、前記取得部で形成された値をインデックスとして、前記記憶部に記憶したテーブルから取得した第１の値と、前記形成された値に１を加えた値をインデックスとして、前記記憶部に記憶したテーブルから取得した第２の値とが不連続である場合に、入力した引数に含まれた指数部を変換する際に、変換した指数部から所定の値を減じた値も導出し、
前記導出部は、前記第１の値および前記変換部で変換した指数部、ならびに前記第２の値および前記変換した指数部から所定の値を減じた値よりふたつの仮の戻り値をそれぞれ導出し、前記ふたつの仮の戻り値に補間演算を施して前記関数の戻り値を導出することを特徴とする請求項６または７に記載の演算装置。
【請求項９】
指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、
関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、
関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予め記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、前記テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、前記テーブルから複数の値をそれぞれ取得するステップと、
変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備え、
前記取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に１を加えた数が、インデックスの数として規定されていることを特徴とする演算方法。
【請求項１０】
所定のインターフェースを介して、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、
関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、
関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予めメモリに記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、前記テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて前記メモリにアクセスすることによって、前記テーブルから複数の値をそれぞれ取得するステップと、
変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備え、
前記取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に１を加えた数が、インデックスの数として規定されていることをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算技術に関し、特に浮動小数点の形式によって表現された値に対して演算を実行する演算方法および装置に関する。
【背景技術】
【０００２】
コンピュータやＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｅｒ）が数値を扱う際の表現手法として、一般的に固定小数点数と浮動小数点数が使用されている。浮動小数点数は小数点に関する処理を必要とするので、浮動小数点数の計算速度は、特定の位置に小数点を固定している固定小数点数の計算速度に比べて、遅くなる傾向にある。しかしながら、浮動小数点数は、小数点の位置を変更できるので、絶対値が小さな数の場合に高い精度で数を表現でき、一方、絶対値が大きな数の場合であっても数を表現できる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
グラフィックスハードウエアのピクセルパイプラインでは、ライティング計算や画像処理演算が実行される。このような計算は、ベクトルの正規化、逆行列の計算などを含み、それらは多くの逆数計算や平方根逆数計算等を実行する。従来、ピクセルパイプラインは、演算対象を整数としていたので、整数テーブルと整数の線形補間演算にもとづく逆数や平方根逆数の計算によって実行されていた。しかしながら、近年、ピクセルパイプラインは、演算対象として浮動小数点演算をサポートする傾向にあるので、浮動小数点数に対する逆数や平方根逆数の計算の高速性が要求される。特に、リアルタイムグラフィックスのための演算において、その要求が強くなる。またパイプラインの並列度も多くなる傾向にあるので、コストの点から、使用するハードウエアリソースを最小限に抑えるほうが望ましい。
【０００４】
本発明はこうした状況に鑑みてなされたものであり、その目的は、浮動小数点の形式で表現した数値に対して演算を実行する際に、演算の処理量を軽減する演算方法および装置を提供することにある。
【課題を解決するための手段】
【０００５】
本発明のある態様は、演算装置である。この装置は、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力する入力部と、関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換する変換部と、関数に応じて定めされた仮数部の変換規則によって、引数に含まれる仮数部を変換した値をテーブルとして予め記憶する記憶部と、入力した引数のうちの少なくとも仮数部を近似することによって、記憶部に記憶したテーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、記憶部に記憶したテーブルから複数の値をそれぞれ取得する取得部と、変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力する導出部とを備える。この装置によれば、記憶部には、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に１を加えた数が、テーブルのインデックスの数として規定されてもよい。
【０００６】
「関数に応じて定められた指数部の変換規則」と「関数に応じて定めされた仮数部の変換規則」は、計算すべき関数に応じて定められた規則であって、指数部あるいは仮数部を変換するための規則である。
【０００７】
この態様によると、テーブルを使用することによって、演算の処理量を少なくする場合であっても、インデックスがとりうる数に１を加えた数によってインデックスの数が規定されるので、引数の一部によって近似された値より大きい値と小さい値をインデックスとして用意でき、戻り値の精度を向上できる。
【０００８】
入力部で入力した引数に対応した関数は、引数の逆数の演算であり、記憶部には、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値が、テーブルのインデックスとして規定され、取得部は、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値と、当該近似した値に１を加えた値をテーブルの複数のインデックスとして導出してもよい。
【０００９】
「引数のうちの仮数部を当該仮数部の上位ビットにより近似した値」とは、仮数部を構成する複数のビットのうち、上位から所定のビットを抽出した値に対応する。もとの仮数部のビット数と近似した値のビット数が異なる場合もあるが、ビットの配列において、ビットの同一のパターンが含まれているので、これを近似に含める。
【００１０】
入力部で入力した引数に対応した関数は、引数の平方根の演算であり、記憶部には、引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値が、テーブルのインデックスとして規定され、取得部は、入力した引数のうちの指数部の最下位のビット値と、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値と、当該形成された値に１を加えた値をテーブルの複数のインデックスとして導出してもよい。
【００１１】
「引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値」とは、仮数部を構成する複数のビットのうち、上位から所定のビットを抽出した値と、指数部の最下位のビット値を組み合わせた値である。ここで、近似に関しては、上記のとおりであってもよい。
【００１２】
本発明の別の態様は、演算方法である。この方法は、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予め記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、テーブルから複数の値をそれぞれ取得するステップと、変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備える。この方法によれば、取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に１を加えた数が、インデックスの数として規定されてもよい。
【００１３】
本発明のさらに別の態様は、プログラムである。このプログラムは、所定のインターフェースを介して、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予めメモリに記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいてメモリにアクセスすることによって、テーブルから複数の値をそれぞれ取得するステップと、変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備える。このプログラムによれば、取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に１を加えた数が、インデックスの数として規定されていることをコンピュータに実行させてもよい。
【００１４】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１５】
本発明によれば、浮動小数点の形式で表現した数値に対して演算を実行する際に、演算の処理量を軽減できる。
【発明を実施するための最良の形態】
【００１６】
（実施例１）
本発明を具体的に説明する前に、概要を述べる。本発明の実施例１は、ディスプレイ等の表示装置に表示すべき画像を生成するために、ライティング計算や画像処理計算を実行する画像表示装置、特にその中で、浮動小数点数の逆数を計算する演算装置に関する。本実施例に係る演算装置は、引数として、符号部、指数部、仮数部で構成される浮動小数点数を入力し、符号部、指数部、仮数部に分離する。演算装置は、予め記憶した値と指数部との間で減算を実行する。なお、当該減算は、逆数に対応している。
【００１７】
また、逆数に対応するように仮数部を変換したした値がテーブルのエントリとして予め記憶されている。当該テーブルのインデックスは、指数部の上位ビットで形成されているが、インデックスの総数は、指数部の上位ビットで表現できる数に１を加えた数で規定されている。演算装置は、インデックスを生成するために、仮数部の上位ビットを抽出し、さらにふたつ目のインデックスを生成するために、抽出した上位ビットに１を加算する。その後、テーブルを参照しながら、生成したふたつのインデックスによって、ふたつのエントリに対応した値を取得する。演算装置は、ふたつのエントリに対応した値のそれぞれに対して、符号部と、減算した指数部をそれぞれ合成して、ふたつの仮の戻り値を生成する。最終的に、ふたつの仮の戻り値に内挿補間処理を実行して、戻り値を生成する。
【００１８】
演算装置は、指数部に対して減算を実行し、仮数部に対してテーブルにもとづく変換を実行しており、一般的に処理量の多い乗算および除算処理が内挿補間処理だけに使用されているので、全体の処理量を小さくできる。また、テーブルのインデックスを仮数部の上位の数ビットとしているので、テーブルの規模を小さくできる。また、テーブルの規模を小さくしながらも、内挿補間処理を実行するので、精度の低下を抑制できる。また、インデックスの総数は、指数部の上位の数ビットで表現できる数に１を加えた数で規定されているので、入力した引数に含まれた指数部の上位の数ビットが最大値であっても、演算装置は、内挿補間処理を実行できる。
【００１９】
本実施例における演算装置の構成を説明する前に、本実施例における逆数演算のアルゴリズムを説明する。図１は、本発明の実施例１に係る浮動小数点数のフォーマットを示す。符号部１０は、数値の符号を反映しており、１ビット符号なし整数で構成されている。指数部１２は、２のべき乗の整数値を表しており、８ビット符号なし整数で構成されている。仮数部１４は、１．０から２．０の値を表しており、２３ビット符号なし整数で構成されている。図示のごとく、符号部１０をｓ、指数部１２をｅ、仮数部１４をｍとすれば、これらは、次のような浮動小数点数を表現する。また、ここでは、次のｘを関数の引数とする。
（数１）
x  = (-1)s * 2e-127 * (1+m/223)
【００２０】
このように表現されたｘによって、関数の戻り値の１／ｘを表現すれば次のようになる。
（数２）
1/x = 1/{(-1)s * 2e-127 * (1+m/223)}
このように表現された１／ｘを変形すれば、次のようになる。
（数３）
1/x = (-1)s * 2127-e * 1/(1+m/223)
= (-1)s * 2127-e-1 * 2/(1+m/223)
= (-1)s * 2(253-e)-127 * 2/(1+m/223)
= (-1)s * 2(253-e)-127 * (1+(1-m/223)/(1+m/223))
= (-1)s * 2(253-e)-127 * (1+(223-m)/(223+m)*223/223)
【００２１】
ここで、指数部１２を変換した値（以下、「変換指数部」という）をe’で示し、仮数部１４を変換した値（以下、「変換仮数部」という）をm’で示せば、これらの値は、次のように示される。
（数４）
e’=253-e (ただしe≧254のときはe’=0)
m’=(223-m)/(223+m)*223
このような変換指数部と変換仮数部を使用すれば、１／ｘは、次のように示される。
（数５）
1/x = (-1)s * 2e’-127 * (1+m’/223)
【００２２】
つまり、これは、引数ｘの指数部１２と仮数部１４に対して、変換指数部と変換仮数部を導出すれば、ｘの逆数１／ｘが計算できることを意味する。ここで、変換指数部は、８ビットの減算処理で導出できるが、変換仮数部は、単純な演算器で導出できないので、テーブルを使用する。その際、仮数部１４の２３ビットをテーブルのインデックスとすれば、テーブルの規模が大きくなるので、仮数部１４の上位８ビットをテーブルとする。これは、次のようにも示される。
（数６）
m’=table0[m[0:7]]
【００２３】
ここで table0[m[0:7]] は、仮数部１４の上位８ビットをインデックスとして、テーブルから取得した値、すなわちエントリの値である。当該エントリの値が変換仮数部に対応する。なお、テーブルにおいて、１エントリのサイズは２３ビットとする。i番目のエントリであるtable0[i]には、(223-i)/(223+i)*223の値が整数化して記憶されている。ただし、テーブルサイズが23ビットであるので、エントリにいれる値が223-1を超える場合はエントリの値は223-1としている。
【００２４】
しかしながら、エントリの値をひとつだけ抽出し、そのような値を変換仮数部として計算した場合、仮数部の精度が８ビット程度となる。そこで本実施例では、インデックスで表現できる数に１を加えた２５７個のエントリを持つテーブルを予め用意し、仮数部１４の上位８ビットと当該値に１を加えた値から、隣接したふたつのインデックスを生成する。さらに、ふたつのインデックスから、ふたつのエントリの値を取り出し、このふたつのエントリの値を内挿補間処理し、さらに高精度な近似解を導出する。
【００２５】
以上のようなふたつのインデックスのうち、小さい方のインデックスから取得されたエントリの値を変換仮数部Ａとし、大きい方のインデックスから取得されたエントリの値を変換仮数部Ｂとする。さらに、変換仮数部Ａをｍ’とし、変換仮数部Ｂをｍ”とすれば、変換仮数部Ａに対応した仮の戻り値（以下、「仮の戻り値Ａ」という）ａと変換仮数部Ｂに対応した仮の戻り値（以下、「仮の戻り値Ｂ」という）ｂは、次のように示される。
【００２６】
ここで、引数ｘに対して、指数部１２に８ビットの整数演算を施し、仮数部１４の上位８ビットをインデックスとしてエントリを１つ取得する。このようにして仮の戻り値Ａが計算される。このとき、e’が負になる場合はe’の値は0とする。また、  仮の戻り値Ｂは、仮数部１４の上位８ビットに１が加えられた値をインデックスとする以外、仮の戻り値Ａと同様に導出される。
【００２７】
（数７）
e’=253-e
m’=table0[m[0:7]]
（数８）
a = (-1)-s * 2e’-127 * (1+m’/223)
【００２８】
（数９）
e’=253-e
m”=table0[m[0:7]+1]
（数１０）
b = (-1)-s * 2e’-127 * (1+m”/223)
【００２９】
仮数部１４の下位１５ビットを３２ビットの浮動小数点数に変換した値をｃで示せば、１／ｘは次のように示される。
（数１１）
c= m[8:22]/215
（数１２）
1/x = (1/x1-1/x0)*(m[8:22]/215)+1/x0 = (b-a)*c+a
以上のごとく、１／ｘは、ｃにもとづいて、ａとｂを内挿補間することによって、導出される。このようなアルゴリズムによれば、指数部１２の上位８ビットが最大値であっても、インデックス「２５６」と「２５７」によって内挿補間を実行できる。本実施例に係る演算装置は、数１０から数１２の処理を実行するように構成される。
【００３０】
なお、変換値であるe’とm’が適正な範囲であることを確認する。まず、0≦e≦255であるから、0≦e’≦253である。また、0≦m<223であるから、0＜m’=(223-m)/(223+m)*223≦223となる。ただし、上記のとおりm’はテーブルから求めるため、m’=223にならない。よって、0＜m’=(223-m)/(223+m)*223＜223である。すなわち、e’は8bit, m’は23bitの符号なし整数で表現できる。
【００３１】
図２は、本発明の実施例１に係る画像表示装置１００の構成を示す。画像表示装置１００は、画像処理部２０、画像出力部２２、演算装置２４、記憶部３８を含む。また、演算装置２４は、入力部２６、分離部２８、第１変換部３０、第２変換部３２、取得部３４、導出部３６を含む。また、信号として、変換符号部２００、変換指数部２０２、変換仮数部２０４、戻り値２０８を含む。
【００３２】
画像処理部２０は、画像を生成するために、ライティング計算や画像処理計算を実行する。例えば、画像処理部２０は、コンピュータグラフィックにおけるサーフェスモデル等によって、球体を生成するためにライティング計算を実行する。そのようなライティング計算は、正規化されたベクトルの導出に逆数の計算を必要とする。逆数の計算が必要になった場合に、画像処理部２０は、演算装置２４に引数を出力する。また、演算装置２４から戻り値、すなわち計算された逆数を入力すれば、画像処理部２０は当該逆数を使用しながら画像を生成する。画像出力部２２は、画像処理部２０で生成した画像を表示する。画像出力部２２は、ディスプレイ等によって構成される。
【００３３】
入力部２６は、図１のごとく、符号部１０、指数部１２、仮数部１４を含んだ浮動小数点形式によって表現された関数の引数を入力する。なお、引数は画像処理部２０から入力される。
【００３４】
分離部２８は、入力した引数を符号部１０、指数部１２、仮数部１４に分離する。分離部２８は、符号部１０を第１変換部３０に出力し、指数部１２を第２変換部３２に出力し、仮数部１４を取得部３４および導出部３６に出力する。
【００３５】
第１変換部３０は、符号部１０に対して所定の変換を行う。計算すべき関数が逆数の場合、数５のように、引数における符号部１０と戻り値における符号部１０は同一の値である。すなわち、第１変換部３０は、入力した符号部１０をそのまま導出部３６に出力する。ここで、第１変換部３０から導出部３６に出力される符号部１０は、変換符号部２００と呼ばれる。
【００３６】
第２変換部３２は、関数に応じて定められた指数部の変換規則によって、指数部１２に含まれた指数部を変換する。ここで関数は逆数なので、変換規則は、数４、数７、数９のごとく、「２５３」から指数部１２を減じる減算処理に対応する。ただし、符号部１０が「２５４」以上の場合は「０」とする。減算した結果は、変換指数部２０２として導出部３６に出力される。変換指数部２０２は、数４、数７、数９のｅ’に対応する。
【００３７】
記憶部３８は、関数に応じて定められた仮数部の変換規則によって、仮数部１４を変換した値をテーブルとして予め記憶する。ここで関数は逆数なので、変換規則は、数４のｍ’の計算式に対応する。記憶部３８に記憶されたテーブルは、仮数部１４の上位８ビットをインデックスとする。すなわち、引数を近似した値をインデックスとする。ここで、仮数部１４の上位８ビットがとりうる値の総数は２５６であるが、前述のごとく、テーブルのインデックスの数は、２５６に１を加えた２５７に規定されている。また、記憶部３８は、数４のｍ’をエントリとする。図３は、記憶部３８に記憶されたテーブルのデータ構造を示す。「インデックス」が「０」から「２５６」まで、すなわち２５７個規定されている。また、「インデックス」にそれぞれ対応した「エントリ」が「Ｃ０」から「Ｃ２５６」まで記憶されている。ここで、「Ｃ０」は、数４のｍ’に対して、ｍに「０」を代入した値であり、「Ｃ１」は、ｍに「１」を代入した値である。
【００３８】
図２に戻る。取得部３４は、仮数部１４を構成する２３ビットから上位８ビットを抽出することによって、すなわち仮数部１４を上位８ビットで近似することによって、記憶部３８に記憶したテーブルのインデックスを導出する。さらに、取得部３４は、インデックスをふたつ導出するために、上位８ビットによって近似した仮数部１４に対して、１を加えた数を導出する。以上の結果、取得部３４は、ふたつのインデックスを導出する。その後、取得部３４は、ふたつのインデックスにもとづいて、記憶部３８に記憶したテーブルからふたつのエントリの値をそれぞれ取得する。すなわち、図３のテーブルにおいて、ふたつのインデックスに対応したふたつのエントリの値、すなわち変換仮数部２０４Ａと変換仮数部２０４Ｂを取得する。取得したふたつのエントリの値が、数７のｍ’と数９のｍ”に対応する。なお、ふたつのエントリの値は、変換仮数部２０４として、導出部３６に出力される。記憶部３８がメモリ等の記憶媒体で構成される場合、インデックスはアドレスに対応してもよい。
【００３９】
導出部３６は、取得部３４で取得したふたつの変換仮数部２０４のそれぞれに対応するように、変換符号部２００と変換指数部２０２を加えて、引数と同様の浮動小数点形式で表現された仮の戻り値Ａと仮の戻り値Ｂをそれぞれ導出する。仮の戻り値Ａは数８のａに対応し、仮の戻り値Ｂは数１０のｂに対応する。引数と同様の浮動小数点形式とは、図１に示したフォーマットであり、ここでは、左から変換符号部２００、変換指数部２０２、変換仮数部２０４の順に並べられる。さらに、導出部３６は、仮数部１４の下位１５ビットを使用しつつ、仮の戻り値Ａと仮の戻り値Ｂに補間演算を施して関数の戻り値２０８を導出する。なお補間演算の前に、仮数部１４の下位１５ビットは、数１１のごとく、浮動小数点数のｃに変換される。ａ、ｂ、ｃによる補間演算は、数１２のような線形補間によって、実行される。
【００４０】
この構成は、ハードウエア的には、任意のコンピュータのＣＰＵ、メモリ、その他のＬＳＩで実現でき、ソフトウエア的にはメモリのロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
【００４１】
図４は、導出部３６の構成を示す。導出部３６は、合成部４０、補間部４２を含む。合成部４０は、変換符号部２００、変換指数部２０２、変換仮数部２０４を合成することによって、仮の戻り値を生成する。変換仮数部２０４には、ふたつの値が含まれているので、それぞれに対応するように仮の戻り値Ａと仮の戻り値Ｂが生成される。これらの生成は、図１のごとく、変換符号部２００、変換指数部２０２、変換仮数部２０４を並べるだけの処理である。合成部４０は、仮の戻り値Ａと仮の戻り値Ｂを補間部４２に出力する。
【００４２】
補間部４２は、仮の戻り値Ａと仮の戻り値Ｂに対して、線形補間を実行して戻り値２０８を生成する。線形補間を実行するために、仮数部１４の下位１５ビットを浮動小数点数に変換した値を使用する。前述のごとく、仮の戻り値Ａ、仮の戻り値Ｂ、変換した値は、数１２のａ、ｂ、ｃによって示され、戻り値２０８は数１２の１／ｘによって示される。ｃは、仮数部１４がインデックスに使用した仮数部１４の上位８ビットの値にどれだけ近いかを示す指標となる。また、仮数部１４の上位８ビットの値から離れていれば、それは、もうひとつのインデックスの値に近いことに相当する。
【００４３】
図５は、演算装置２４による演算処理の手順を模式的に示す。入力部２６は、３２ビットの引数を入力する（Ｓ１０）。分離部２８は、入力した引数を分離する。すなわち１ビットの符号部１０を抽出し（Ｓ１２）、８ビットの指数部１２を抽出し（Ｓ１４）、仮数部１４の上位８ビットを抽出する（Ｓ１６）。第１変換部３０は、符号部１０を変換符号部２００として出力する。第２変換部３２は、固定値「２５３」を入力し（Ｓ２０）、固定値と指数部１２によって減算を実行して（Ｓ２２）、変換指数部２０２を出力する。取得部３４は、仮数部１４の上位８ビットからふたつのインデックスを生成し（Ｓ２４）、当該インデックスにもとづいて、記憶部３８から変換仮数部２０４Ａを取得しつつ（Ｓ２６）、変換仮数部２０４Ｂも取得する（Ｓ２８）。
【００４４】
合成部４０は、変換符号部２００、変換指数部２０２、変換仮数部２０４Ａから仮の戻り値Ａを生成する（Ｓ３０）と共に、変換符号部２００、変換指数部２０２、変換仮数部２０４Ｂから仮の戻り値Ｂを生成する（Ｓ３２）。補間部４２は、仮数部１４の下位１５ビットを抽出し（Ｓ１８）、当該仮数部１４の下位１５ビットを浮動小数点数に変換する（Ｓ３４）。さらに、補間部４２は、変換した浮動小数点数にもとづいて、仮の戻り値Ａと仮の戻り値Ｂを内挿補間して（Ｓ３６）、戻り値を生成する。最終的に、３２ビットの戻り値を出力する（Ｓ３８）。
【００４５】
図６（ａ）−（ｂ）は、演算装置２４による近似解、すなわち数１２の１／ｘと真の解との関係を示す。これらの図にもとづいて、本実施例では、補間が行われた場合に精度が向上する理由を説明する。図６（ａ）は、本実施例での補間処理による近似解を示す。横軸のSample point（A）とSample point（B）が、テーブルのインデックスに相当する離散的な値を示す。縦軸が、インデックスに対応したエントリおよび近似解を示す。
【００４６】
前述のごとく、Sample point（A）とSample point（B）における２点が、隣接するエントリを参照する２点で、AとBの間の近似解は線形補間によって計算される。本実施例では、線形補間係数が0.0であるSample pointにおける近似解、すなわちエントリの値そのものは、真の解を３２ビットの浮動小数点で表現した値に対して、仮数部１４の下位ビットをマスクしたものである。従って、入力がx≧0の場合は、Sample pointにおける近似解は真の解よりも小さくなる。ここで、入力が負の場合は原点対象になるのみで、本質は変わらないので、説明を省略する。また、真の解の二次微分係数は、次のように示される。
（数１３）
(d2/dx2){1/x}=(d/dx){-1/x2}=2/x3
【００４７】
よって、x≧0のときは、常に曲線の二次微分係数は正となる。そのため、図示のごとく、下に膨らんだ曲線になる。すなわち、真の解と近似解の関係図は、図６（ａ）あるいは図６（ｂ）のいずれかで示される。図６（ａ）では、隣接するSample point（A）とSample point（B）の区間における誤差は、中央部分において最小になる。一方、図６（ｂ）では、Sample point（A）とSample point（B）の区間における誤差は、中央において最大になる。
【００４８】
しかしながら、本実施例では、浮動小数点数の仮数部１４を８ビットのインデックスとしており、この場合の真の解とエントリの位置関係は、図６（ｂ）のようなケースにはならず、図６（ａ）のようになる。このとき、Sample point（A）とSample point（B）の区間における誤差は、中央部分において最小になる。すなわち、Sample point（A）とSample point（B）の区間における近似解の精度は、Sampling pointにおける精度を下回らない。なお、以上の説明は、１／ｘに関するものであるが、それ以外の関数にも対応する。
【００４９】
本発明の実施例によれば、仮数部を近似した値でテーブルのインデックスを生成するので、テーブルのサイズを削減できる。また、近似した値がとりうる総数に１を加えた値が、インデックスの数として規定されているため、すべての近似した値に対して、複数のインデックスを生成でき、戻り値の精度を向上できる。また、指数部は、減算処理を実行するだけなので、処理量を削減できる。また、テーブルから取得した複数の値に対して補間処理を実行して戻り値を導出するので、戻り値の精度を向上できる。また、逆数の計算が、処理量を抑えつつも、高い精度によって実行される。また、補間処理のみに乗算が実行されるので、処理量を小さくできる。
【００５０】
また、浮動小数点数の演算が、1回の線形補間計算によって実行できるので、処理量を削減できる。また、少なくとも１７ビットの精度を持つ逆数の計算が可能となる。また、テーブルは、２５７のインデックスを有した２３ビットのエントリで逆数計算を実行できる。また、ひとつのエントリにおけるビットサイズを小さくして、精度とＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）容量のトレードオフを調整することもできる。
【００５１】
（実施例２）
本発明の実施例２は、実施例１と同様に、浮動小数点数の引数に対して逆数を計算する演算装置に関する。実施例２に係る演算装置は、実施例１と同様に、テーブルを参照しながら、ふたつのインデックスによって、ふたつのエントリに対応した値、すなわちふたつの変換仮数部を取得する。しかしながら、実施例１と異なって、演算装置は、ふたつの変換仮数部を内挿補間処理してから、内挿補間された値、変換符号部、変換指数部を合成して、戻り値を生成する。すなわち、内挿補間と合成の順番が実施例１と異なる。
【００５２】
実施例２に係る画像表示装置１００は、図２に示した画像表示装置１００と同じタイプであるので、説明を省略する。
【００５３】
図７は、本発明の実施例２に係る導出部３６の構成を示す。導出部３６は、補間部４２、合成部４０を含む。図７の導出部３６は、図４の導出部３６と比較して、合成部４０と補間部４２の順番が異なる。
【００５４】
補間部４２は、図示しない取得部３４から入力したふたつの変換仮数部２０４に対して、補間演算を施す。すなわち、変換仮数部２０４Ａと変換仮数部２０４Ｂを線形補間する。補間部４２は、線形補間を実行するために、仮数部１４の下位１５ビットを浮動小数点数に変換した値を使用する。具体的には、数１２におけるａをｍ’に置き換え、ｂをｍ”に置き換えることによって線形補間を実行し、数１２における１／ｘの代わりの値（以下、「補間仮数部」という）が得られる。なお、ｃ等の性質は、実施例１と同様であるので、説明を省略する。また、補間部４２は、合成部４０に補間仮数部を出力する。
【００５５】
合成部４０は、変換符号部２００、変換指数部２０２、補間仮数部を合成することによって、戻り値２０８を生成する。これらの生成は、図１のごとく、変換符号部２００、変換指数部２０２、補間仮数部を左から並べるだけの処理である。合成部４０は、戻り値２０８を出力する。
【００５６】
図８は、演算装置２４による演算処理の手順を模式的に示す。ステップ５０からステップ６８は、図５のステップ１０からステップ２８にそれぞれ対応するので、説明を省略する。補間部４２は、仮数部１４の下位１５ビットを使用しつつ、変換仮数部Ａと変換仮数部Ｂを内挿補間して（Ｓ７０）、補間仮数部を生成し、合成部４０に出力する。合成部４０は、変換符号部２００、変換指数部２０２、補間仮数部を合成して、関数の戻り値を生成する（Ｓ７２）。さらに、３２ビットの戻り値を出力する（Ｓ７４）。
【００５７】
本発明の実施例によれば、実施例１と同様の効果がえられる。また、仮の戻り値よりもビット数の少ない変換仮数部に対して、補間計算を実行するので、処理量を削減できる。また、処理量が少ないので、処理速度が速くなる。また、消費電力を小さくできる。
【００５８】
（実施例３）
本発明の実施例３は、これまでの実施例と異なって、浮動小数点数の引数に対して平方根の逆数を計算する演算装置に関する。実施例３に係る演算装置は、これまでと同様に、引数を符号部、指数部、仮数部に分離して、指数部から減算によって変換指数部を導出しつつ、変換仮数部をテーブルのエントリとして記憶しておき、ふたつのインデックスからふたつの変換仮数部を取得する。さらに、ふたつの変換仮数部に対してそれぞれ符号部と指数部を合成することによって、ふたつの仮の戻り値を導出する。最終的に、ふたつの仮の戻り値に対して内挿補間を実行して、戻り値を導出する。
【００５９】
しかしながら、これまでの実施例とは別のインデックスの導出方法を使用する。インデックスのビット数は、８ビットであるが、その内容は指数部の最下位の１ビットと仮数部の上位７ビットを組み合わせた値である。詳細は後述するが、平方根の逆数の場合、指数部が偶数か奇数かによって、変換仮数部の値が異なってくる。そこで、インデックスの最上位ビットに、指数部が偶数か奇数かを示すビットを挿入し、それぞれのインデックスに対応した値をエントリとすることによって、指数部の偶奇性を考慮したテーブルを実現できる。
【００６０】
また、以上のようにテーブルを構成したために、インデックスが連続した値であるにもかかわらず、エントリが連続した値にならない場合がある。すなわち、インデックスの最小ビットが０であり、かつ下位ビットがすべて１になる値と、その次のインデックスの最小ビットが１であり、かつ下位ビットがすべて０になる値である。これらは、前述のごとく、それぞれ偶数の指数部と奇数の指数部とに対応した変換仮数部の値であるので、不連続になる。本実施例に係る演算装置は、このような不連続の場合に処理を工夫して、同一のテーブルを使用しつつ、正常な値を出力する。なお、これまでの実施例と同様に、インデックスの数は、８ビットによって表現できる数に１を加えた数とする。
【００６１】
本実施例における演算装置の構成を説明する前に、本実施例における平方根の逆数演算のアルゴリズムを説明する。実施例１の数１と同様に、関数の引数のｘを表現すれば、1/√|x|は、次のように示される。
（数１４）
1/√|x| = 1/√|(-1)s * 2e-127 * (1+m/223)|
= 1/√{(-1)0 * 2e-127 * (1+m/223)}
これを変形すれば、以下のように示される。
（数１５）
1/√|x| = √{(-1)0 } *  √{2127-e }* √{1/(1+m/223)}
= (-1)0 * √{2127-e-1 }* √{2/(1+m/223)}
【００６２】
ここで、指数部１２が偶数の場合と奇数の場合を分類して、式を展開する。指数部１２が偶数の場合は、以下のようになる。
（数１６）
1/√|x| = (-1)0 * √{2126-e }* √{2/(1+m/223)}
= (-1)0 * √{22(63-e/2) }* √{1+(1-m/223)/(1+m/223)}
= (-1)0 * 2(63-e/2) * √{1+(1-m/223)/(1+m/223)}
= (-1)0 * 2(63+127-e/2-127) * √{1+(1-m/223)/(1+m/223)}
= (-1)0 * 2(190-e/2-127) * √{1+(1-m/223)/(1+m/223)}
【００６３】
ここで、変換指数部２０２であるe’と、変換仮数部２０４であるｍ’を以下のように定義する。
（数１７）
e’=190-e/2
m’=(√{1+(1-m/223)/(1+m/223)}-1)*223
これらを使用すれば、1/√|x|は次のように示される。
（数１８）
1/√|x| = (-1)0 * 2e’-127 * (1+m’/223)
【００６４】
一方、指数部１２が奇数の場合に、数１５は以下のように展開される。
（数１９）
1/√|x| = (-1)0 * √{2126-e }* √{2/(1+m/223)}
= (-1)0 * √{22(63-(e+1)/2)+1 }* √{1+(1-m/223)/(1+m/223)}
= (-1)0 * 2(63-(e+1)/2) * √{2} * √{1+(1-m/223)/(1+m/223)}
= (-1)0 * 2(63+127-(e+1)/2-127) * √{2} * √{1+(1-m/223)/(1+m/223)}
= (-1)0 * 2(190-(e+1)/2-127) * √{2+2(1-m/223)/(1+m/223)}
【００６５】
ここで、変換指数部２０２であるe’と、変換仮数部２０４であるｍ’を以下のように定義する。
（数２０）
e’=190-(e+1)/2
m’=(√{2+2(1-m/223)/(1+m/223))}-1)*223
これらを使用すれば、1/√|x|は次のように示される。
（数２１）
1/√|x| = (-1)0 * 2e’-127 * (1+m’/223)
【００６６】
すなわち、指数部１２が偶数であるか奇数であるかに応じて、数１７と数２０のように変換指数部２０２と変換仮数部２０４とを変えれば、数１８と数２１のように、1/√|x|は同一の式で表現される。以上の処理は、指数部１２が偶数であるか奇数であるかによって処理内容が変わるので、分岐処理を必要とする。このような分岐処理を避けるために、本実施例では、指数部１２の下位１ビットと仮数部１４の上位７ビットを組み合わせた８ビットの値をインデックスとして規定する。
【００６７】
このようにして、指数部１２の下位１ビットは、偶数奇数を判別するために使用される。すなわち、インデックスを形成する８ビットのうちの上位１ビットが偶数であるか奇数であるかを表しているので、偶数のときは「０」から「１２７」のインデックスおよびそれに対応したエントリを使用し、奇数のときは「１２８」から「２５５」のインデックスおよびそれに対応したエントリを使用する。このように、予め偶数用と奇数用とに分けたエントリの値が、テーブルに記憶される。つまり、数１７と数２０のように偶数と奇数とに分けて表されている変換仮数部２０４の値が、テーブルの半分ずつのエントリに収納される。
【００６８】
さらに、実施例１と同様に、２５７個のインデックスおよびエントリを有するテーブルを用意しておき、８ビットのインデックスから、隣接するふたつのエントリを取得し、このふたつのエントリの値を使用して近似解を求める。
【００６９】
仮の戻り値Ａは、次のように示される。
（数２２）
a = (-1)-s * 2e’-127 * (1+m’/223)
変換指数部２０２と変換仮数部２０４は、次のように示される。
（数２３）
e’=(380-e)/2
m’=table0[e[7]m[0:6]]
【００７０】
ここで table0[e[7]m[0:6]] は、指数部１２の下位１ビットと仮数部１４の上位７ビットをインデックスとして、テーブルから取得した値、すなわちエントリの値である。また、当該エントリの値が変換仮数部２０４に対応する。なお、テーブルにおいて、１エントリのサイズは２３ビットとする。i番目のエントリであるtable0[i]には、数１７あるいは数２０でのｍ’の値が整数化されて記憶されている。
【００７１】
一方、仮の戻り値Ｂは、次のように示される。
（数２４）
b = (-1)-s * 2e’-127 * (1+m’/223)
変換指数部２０２は、次のように示される。
（数２５）
e’=(379-e)/2  （e[7]m[0:6]が１２７の場合）
（数２６）
e’=(380-e)/2  （e[7]m[0:6]が127以外の場合）
変換仮数部２０４は、次のように示される。
（数２７）
m’=table0[e[7]m[0:6]+1]
【００７２】
数２５と数２６において、e[7]m[0:6]が127のときとそれ以外のときによって、処理が異なる。この理由を述べる。e[7]m[0:6]が127のとき、線形補間に使用される２つ目の値b、すなわち変換仮数部２０４Ｂを求める際のインデックスe[7]m[0:6]+1は、「１」の最上位ビットを有する。そのため、aとbの連続性が保たれない。さらに詳細に説明すると、インデックス「１２７」と「１２８」に対応したエントリは、前述のごとく、偶数に対応したエントリと奇数に対応したエントリを使い分けていた境界である。そのため、aを生成するためのインデックス（e[7]m[0:6])が127のときに、bを生成するためのインデックス（e[7]m[0:6]+1)が128になり、本来奇数用に作られたエントリが使用される。その結果、aとbが連続しなくなる。この差を埋めるために、８ビットの値（e[7]m[0:6])が127のときには、e'の値が１だけ小さくなるように補正を実行する。それが数２５に対応する。
【００７３】
仮数部１４の下位１６ビットを３２ビットの浮動小数点数に変換した値をｃで示せば、1/√|x|は次のように示される。
（数２８）
c= m[7:22]/216
（数２９）
1/√|x| = ( 1/√|x1| - 1/√|x0| )*(m[7:22]/216)+ 1/√|x0| = (b-a)*c+a
以上のごとく、1/√|x|は、ｃにもとづいて、ａとｂを内挿補間することによって、導出される。本実施例に係る演算装置は、数２２から数２９の処理を実行するように構成される。
【００７４】
なお、変換した値であるe’,m’が適正な範囲であることを確認する。まず、0≦e≦255であるので、e’は-190の値をとりうる。m’に対して、次のように示される。
（数３０）
m’=(√{1+(1-m/223)/(1+m/223))}-1)*223  （e=偶数のとき）
そのため、次のように示される。
（数３１）
0＜m’≦(√{2} - 1)*223＜223
【００７５】
（数３２）
m’=(√{2+2(1-m/223)/(1+m/223))}-1)*223  （e=奇数のとき）
そのため、次のように示される。
（数３３）
(√{2} - 1)*223＜m’≦223
ただし、前述のとおりm'はテーブルから求めているため、m’＜223である。そのため、次のように示される。
（数３４）
(√{2} - 1)*223＜m’＜223
数３１と数３４をあわせると次のようになる。
（数３５）
0<m’<223
すなわち、変換指数部２０２であるe’は８ビットの符号なし整数によって表現でき、変換仮数部２０４であるm’は２３ビットの符号なし整数で表現できる。
【００７６】
実施例２に係る画像表示装置１００は、図２に示した画像表示装置１００と同じタイプである。しかしながら、一部の構成および構成要素の機能が異なる。ここでは、異なっている部分を中心に説明する。
【００７７】
分離部２８は、実施例１と同様に、入力した引数を符号部１０、指数部１２、仮数部１４に分離する。分離部２８は、取得部３４に対して、指数部１２の下位１ビットと仮数部１４を出力する。ここで、分離部２８から取得部３４へ指数部１２の下位１ビットを出力するための信号線は、図２に図示されていない。第１変換部３０は、符号部１０を正の値に変換し、変換符号部２００として導出部３６に出力する。第２変換部３２は、数２５あるいは数２６の計算を実行する。当該計算は、実施例１と異なって、２による除算を含んでいる。しかしながら、２による除算は、ビットシフトで実現可能であるので、実質的な処理量の増加は小さい。
【００７８】
記憶部３８は、関数に応じて定められた仮数部の変換規則によって、仮数部１４を変換した値をテーブルとして予め記憶する。ここで関数は平方根の逆数なので、変換規則は、数１７のｍ’あるいは数２０のｍ’の計算式に対応する。すなわち、指数部１２の下位１ビットが「０」ならば、数１７のｍ’をエントリとし、指数部１２の下位１ビットが「１」ならば、数２０のｍ’をエントリとする。前者は指数部１２が偶数である場合に相当し、後者は指数部１２の下位１ビットが奇数である場合に相当する。
【００７９】
記憶部３８に記憶されたテーブルは、少なくとも仮数部１４を含むように、指数部１２の下位１ビットと仮数部１４の上位７ビットをインデックスとする。このように、引数をこれらの値によって近似した値をインデックスとする。また、これまでと同様に、テーブルのインデックスの数は、２５６に１を加えた２５７に規定されている。
【００８０】
図９は、本発明の実施例３に係る記憶部３８に記憶されたテーブルのデータ構造を示す。図９の「インデックス」と「エントリ」は、図３の「インデックス」と「エントリ」にそれぞれ対応する。インデックスの数は、図３と同様に「０」から「２５６」までの２５７だけ規定されている。「０」から「１２７」のインデックスは、指数部１２の下位１ビットが０である場合に相当し、それに対応したエントリは数１７のｍ’に相当する。また、「１２８」から「２５６」のインデックスは、指数部１２の下位１ビットが１である場合に相当し、それに対応したエントリは数２０のｍ’に相当する。
【００８１】
実施例３に係る画像表示装置１００の説明に戻る。以上の結果、取得部３４は、ふたつのインデックスを導出する。その後、取得部３４は、ふたつのインデックスにもとづいて、記憶部３８に記憶したテーブルからふたつのエントリの値をそれぞれ取得する。すなわち、図３のテーブルにおいて、ふたつのインデックスに対応したふたつのエントリを取得する。取得したふたつのエントリが、数７のｍ’と数９のｍ”に対応する。なお、ふたつのエントリは、変換仮数部２０４として、導出部３６に出力される。
【００８２】
取得部３４は、仮数部１４の上位７ビットと、指数部１２の下位１ビットとを合成することによって、すなわち少なくとも仮数部１４を近似することによって、記憶部３８に記憶したテーブルのインデックスを導出する。さらに、取得部３４は、インデックスをふたつ導出するために、前述のインデックスに１を加えた数を導出する。その後、導出したふたつのインデックスにもとづいて、記憶部３８からふたつの変換仮数部２０４を取得する過程は、実施例１と同様であるので、説明を省略する。
【００８３】
導出部３６は、変換符号部２００、変換指数部２０２、ふたつの変換仮数部２０４から仮の戻り値Ａと仮の戻り値Ｂを生成する。さらに、仮の戻り値Ａと仮の戻り値Ｂに対して、補間処理を施して戻り値２０８を生成する。ここで、仮の戻り値を生成する処理は、数２２と数２４に対応し、補間処理は、数２８と数２９に従う。また、これらの処理は実施例１に準じるので、説明を省略する。
【００８４】
また、取得部３４において、ふたつのインデックスの値が「１２７」と「１２８」である場合、すなわち、ふたつのインデックスに対応して記憶部３８に記憶されたエントリの値が不連続である場合に、以下の処理を実行する。所定の指示にもとづいて、第２変換部３２は、変換指数部２０２から所定の値を減じた値も導出する。これは、数２５に相当する。導出部３６は、仮の戻り値Ａを通常通りに生成する。一方、仮の戻り値Ｂは、変換指数部２０２として、変換指数部２０２から１を減算した値を使用しつつ生成する。さらに、仮の戻り値Ａと仮の戻り値Ｂにもとづいて戻り値２０８を導出する。この処理の原理を説明する。図９のエントリ「１２７」の値は「0x4030」であり、エントリ「１２８」の値は「0x7fffff」である。仮に、エントリ「１２８」が「0x000000」であれば、数２６によって、仮の戻り値Ｂを導出できるが、実際は、奇数用の別の値「0x7fffff」が記憶されているので、指数部を１だけ下げることによって、近似している。つまり、以下の関係を利用する。
【００８５】
（数３６）
2^(e-127)   * ( 0x000000 / 0x800000 )
≒2^(e-127-1) * ( 0x7fffff / 0x800000 )
【００８６】
図１０は、演算装置２４による演算処理の手順を模式的に示す。入力部２６は、３２ビットの引数を入力する（Ｓ１００）。分離部２８は、入力した引数を分離する。すなわち１ビットの符号部１０を抽出し（Ｓ１０２）、８ビットの指数部１２を抽出し（Ｓ１０４）、指数部１２の下位１ビットと仮数部１４の上位７ビットを抽出する（Ｓ１０６）。第１変換部３０は、符号部１０を正の値に変換し（Ｓ１１０）、変換符号部２００として出力する。第２変換部３２は、固定値「３８０」を入力し（Ｓ１１２）、固定値と指数部１２によって、数２６のような整数演算を実行して（Ｓ１１４）、変換指数部２０２を出力する。なお、数２５のような整数演算に関しては、説明を省略する。取得部３４は、指数部１２の下位１ビットと仮数部１４の上位７ビットからふたつのインデックスを生成し（Ｓ１１６）、当該インデックスにもとづいて、記憶部３８から変換仮数部２０４Ａを取得しつつ（Ｓ１１８）、変換仮数部２０４Ｂも取得する（Ｓ１２０）。
【００８７】
導出部３６は、変換符号部２００、変換指数部２０２、変換仮数部２０４Ａから仮の戻り値Ａを生成する（Ｓ１２２）と共に、変換符号部２００、変換指数部２０２、変換仮数部２０４Ｂから仮の戻り値Ｂを生成する（Ｓ１２４）。さらに、導出部３６は、仮数部１４の下位１６ビットを抽出し（Ｓ１０８）、当該仮数部１４の下位１６ビットを浮動小数点数に変換する（Ｓ１２６）。導出部３６は、変換した浮動小数点数にもとづいて、仮の戻り値Ａと仮の戻り値Ｂを内挿補間して（Ｓ１２８）、戻り値を生成する。最終的に、３２ビットの戻り値を出力する（Ｓ１３０）。
【００８８】
本発明の実施例によれば、指数部と仮数部との値を近似した値でテーブルのインデックスを生成するので、テーブルのサイズを削減できる。また、近似した値がとりうる総数に１を加えた値が、インデックスの数として規定されているため、すべてのインデックスに対して、複数のインデックスを生成でき、平方根の逆数の戻り値の精度を向上できる。また、指数部は、減算処理とビットシフトを実行するだけなので、処理量を削減できる。また、テーブルから取得した複数の値に対して補間処理を実行して戻り値を導出するので、平方根の逆数の戻り値の精度を向上できる。また、補間処理のみに乗算が実行されるので、処理量を小さくできる。
【００８９】
また、平方根の逆数の計算が、処理量を抑えつつも、高い精度によって実行できる。また、インデックスに指数部の下位１ビットを含めるので、指数部が偶数であるか奇数であるかにかかわらず、ひとつのテーブルに変換仮数部を記憶できる。また、テーブルから取得したふたつの値が連続した値でなくても、変換指数部の値を小さくするような処理を施すので、ふたつの値の連続性を維持できる。また、少なくとも１６ビットの精度を持つ平方根の逆数の計算が可能となる。また、２５７のインデックスを有した２３ビットのエントリを有したテーブルにもとづいて、平方根の逆数の計算を実行できる。
【００９０】
（実施例４）
本発明の実施例３は、浮動小数点数の引数に対して平方根を計算する演算装置に関する。実施例４に係る演算装置は、実施例３に係る演算装置と同様の構成によって、平方根を計算できる。
【００９１】
本実施例における演算装置の構成を説明する前に、本実施例における平方根の演算のアルゴリズムを説明する。本アルゴリズムは、平方根の逆数演算のアルゴリズムとほぼ同じであるので、式だけを記述する。
√|x|は、次のように示される。
（数３７）
√|x|  = √|(-1)s * 2e-127 * (1+m/223)|
= √{(-1)0 * 2e-127 * (1+m/223)}
【００９２】
1/√|x|と同様に展開すると、仮の戻り値Ａは、次のように示される。
（数３８）
a = (-1)-s * 2e’-127 * (1+m’/223)
ここで、変換指数部２０２と変換仮数部２０４は、次のように示される。
（数３９）
e’=(e+127)/2
m’=table0[e[7]m[0:6]]
【００９３】
一方、仮の戻り値Ｂは、次のように示される。
（数４０）
b = (-1)-s * 2e’-127 * (1+m’/223)
変換指数部２０２は、次のように示される。
（数４１）
e’=(e+129)/2  （e[7]m[0:6]が１２７の場合）
（数４２）
e’=(e+127)/2  （e[7]m[0:6]が127以外の場合）
変換仮数部２０４は、次のように示される。
（数４３）
m’=table0[e[7]m[0:6]+1]
【００９４】
仮数部１４の下位１６ビットを３２ビットの浮動小数点数に変換した値をｃで示せば、√|x|は次のように示される。
（数４４）
c= m[7:22]/216
（数４５）
√|x| = (√|x1|-√|x0|)*(m[7:22]/216)+ √|x0| = (b-a)*c+a
【００９５】
実施例４に係る画像表示装置１００は、実施例３に係る画像表示装置１００と同じタイプである。両者の違いは、第２変換部３２が数４１と数４２に対応していることと、記憶部３８に記憶されたエントリの値が、数３７に対応していることである。そのため、画像表示装置１００の説明を省略する。
【００９６】
本発明の実施例によれば、実施例３に記載した効果が得られつつ、平方根の演算を実行できる。
【００９７】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００９８】
本発明の実施例１と２において、第２変換部３２は、固定値と指数部１２との間で減算処理を実行している。しかしながらこれに限らず例えば、第２変換部３２は、加算処理を実行してもよい。この場合、指数部１２の符号を反転させて、固定値に加算する。本変形例によれば、第２変換部３２の構成が多様になる。つまり、乗算処理のような処理量の多い処理でなければよい。
【００９９】
本発明の実施例１から４において、取得部３４は、ふたつのインデックスを生成し、当該ふたつのインデックスにもとづいて、記憶部３８からふたつの変換仮数部２０４を取得している。しかしながらこれに限らず例えば、取得部３４は、複数のインデックスを生成し、当該複数のインデックスにもとづいて、記憶部３８から複数の変換仮数部２０４を取得してもよい。この場合、内挿補間の処理が、複数の変換仮数部２０４あるいは複数の仮の戻り値に対応できるように、変形される。本変形例によれば、近似値の精度を高められる。つまり、ふたつ以上の変換仮数部２０４が使用されればよい。
【０１００】
本発明の実施例１から４において、演算装置２４によってなされる逆数、平方根の逆数、平方根の演算を説明した。しかしながらこれに限らず例えば、演算装置２４はこれら以外の関数を計算してもよい。本変形例によれば、さまざまな関数に本発明を提供できる。つまり、浮動小数点数で表現された引数に対する演算であればよい。
【０１０１】
本発明の実施例１から４において、演算装置２４は、逆数、平方根の逆数、平方根のいずれかひとつの演算を実行していた。しかしながらこれに限らず例えば、演算装置２４は、複数の関数を演算できてもよい。その場合、記憶部３８には、複数の関数に対応したエントリが予め記憶されており、また演算装置２４には、演算を実行すべき関数の種類を示した指示が入力される。演算装置２４は、指示に従って、第１変換部３０等の処理方法を特定して、演算を実行する。本変形例によれば、演算装置２４の回路規模の増加量を抑えながら、さまざまな関数に対応させられる。つまり、浮動小数点数で表現された引数に対する演算であればよい。
【０１０２】
本発明の実施例１から２の任意の組み合わせも有効である。本変形例によれば、組み合わせに対応した効果が得られる。
【図面の簡単な説明】
【０１０３】
【図１】本発明の実施例１に係る浮動小数点数のフォーマットを示す図である。
【図２】本発明の実施例１に係る画像表示装置の構成を示す図である。
【図３】図２の記憶部に記憶されたテーブルのデータ構造を示す図である。
【図４】図２の導出部の構成を示す図である。
【図５】図２の演算装置による演算処理の手順を模式的に示す図である。
【図６】図６（ａ）−（ｂ）は、図２の演算装置による近似解と真の解との関係を示す図である。
【図７】本発明の実施例２に係る導出部の構成を示す図である。
【図８】図７の導出部を含んだ演算装置による演算処理の手順を模式的に示す図である。
【図９】本発明の実施例３に係る記憶部に記憶されたテーブルのデータ構造を示す図である。
【図１０】図９の記憶部を含んだ演算装置による演算処理の手順を模式的に示す図である。
【符号の説明】
【０１０４】
１０  符号部、  １２  指数部、  １４  仮数部、  ２０  画像処理部、  ２２  画像出力部、  ２４  演算装置、  ２６  入力部、  ２８  分離部、  ３０  第１変換部、  ３２  第２変換部、  ３４  取得部、  ３６  導出部、  ３８  記憶部、  ４０  合成部、  ４２  補間部、  １００  画像表示装置、  ２００  変換符号部、  ２０２  変換指数部、  ２０４  変換仮数部、  ２０８  戻り値。
【図１】
2006065633.tif 000003
【図２】
2006065633.tif 000004
【図３】
2006065633.tif 000005
【図４】
2006065633.tif 000006
【図５】
2006065633.tif 000007
【図６】
2006065633.tif 000008
【図７】
2006065633.tif 000009
【図８】
2006065633.tif 000010
【図９】
2006065633.tif 000011
【図１０】
2006065633.tif 000012