JP2006065633A - 演算方法および装置 - Google Patents

演算方法および装置 Download PDF

Info

Publication number
JP2006065633A
JP2006065633A JP2004248395A JP2004248395A JP2006065633A JP 2006065633 A JP2006065633 A JP 2006065633A JP 2004248395 A JP2004248395 A JP 2004248395A JP 2004248395 A JP2004248395 A JP 2004248395A JP 2006065633 A JP2006065633 A JP 2006065633A
Authority
JP
Japan
Prior art keywords
value
argument
unit
mantissa
exponent
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.)
Pending
Application number
JP2004248395A
Other languages
English (en)
Inventor
Kohei Kodama
浩平 小玉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Priority to JP2004248395A priority Critical patent/JP2006065633A/ja
Priority to PCT/JP2005/007250 priority patent/WO2006022048A1/ja
Priority to US11/661,375 priority patent/US8694567B2/en
Priority to EP05730631A priority patent/EP1783601A1/en
Publication of JP2006065633A publication Critical patent/JP2006065633A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/14Conversion to or from non-weighted codes
    • H03M7/24Conversion to or from floating-point codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】 浮動小数点数の演算の処理量を抑えつつ、精度を向上させる。
【解決手段】 第2変換部32は、関数に応じて定められた指数部の変換規則によって、指数部12に含まれた指数部を変換する。記憶部38は、関数に応じて定められた仮数部の変換規則によって、仮数部14を変換した値をテーブルとして予め記憶する。取得部34は、仮数部14を構成する23ビットから上位8ビットを抽出することによって、テーブルのインデックスを導出する。さらに、取得部34は、上位8ビットによって近似した仮数部14に対して1を加え。ふたつ目のインデックスを導出する。導出部36は、仮の戻り値Aと仮の戻り値Bをそれぞれ導出する。さらに、導出部36は、仮の戻り値Aと仮の戻り値Bに補間演算を施して関数の戻り値208を導出する。
【選択図】 図2

Description

本発明は、演算技術に関し、特に浮動小数点の形式によって表現された値に対して演算を実行する演算方法および装置に関する。
コンピュータやDSP(Digital Signal Processer)が数値を扱う際の表現手法として、一般的に固定小数点数と浮動小数点数が使用されている。浮動小数点数は小数点に関する処理を必要とするので、浮動小数点数の計算速度は、特定の位置に小数点を固定している固定小数点数の計算速度に比べて、遅くなる傾向にある。しかしながら、浮動小数点数は、小数点の位置を変更できるので、絶対値が小さな数の場合に高い精度で数を表現でき、一方、絶対値が大きな数の場合であっても数を表現できる。
グラフィックスハードウエアのピクセルパイプラインでは、ライティング計算や画像処理演算が実行される。このような計算は、ベクトルの正規化、逆行列の計算などを含み、それらは多くの逆数計算や平方根逆数計算等を実行する。従来、ピクセルパイプラインは、演算対象を整数としていたので、整数テーブルと整数の線形補間演算にもとづく逆数や平方根逆数の計算によって実行されていた。しかしながら、近年、ピクセルパイプラインは、演算対象として浮動小数点演算をサポートする傾向にあるので、浮動小数点数に対する逆数や平方根逆数の計算の高速性が要求される。特に、リアルタイムグラフィックスのための演算において、その要求が強くなる。またパイプラインの並列度も多くなる傾向にあるので、コストの点から、使用するハードウエアリソースを最小限に抑えるほうが望ましい。
本発明はこうした状況に鑑みてなされたものであり、その目的は、浮動小数点の形式で表現した数値に対して演算を実行する際に、演算の処理量を軽減する演算方法および装置を提供することにある。
本発明のある態様は、演算装置である。この装置は、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力する入力部と、関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換する変換部と、関数に応じて定めされた仮数部の変換規則によって、引数に含まれる仮数部を変換した値をテーブルとして予め記憶する記憶部と、入力した引数のうちの少なくとも仮数部を近似することによって、記憶部に記憶したテーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、記憶部に記憶したテーブルから複数の値をそれぞれ取得する取得部と、変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力する導出部とを備える。この装置によれば、記憶部には、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に1を加えた数が、テーブルのインデックスの数として規定されてもよい。
「関数に応じて定められた指数部の変換規則」と「関数に応じて定めされた仮数部の変換規則」は、計算すべき関数に応じて定められた規則であって、指数部あるいは仮数部を変換するための規則である。
この態様によると、テーブルを使用することによって、演算の処理量を少なくする場合であっても、インデックスがとりうる数に1を加えた数によってインデックスの数が規定されるので、引数の一部によって近似された値より大きい値と小さい値をインデックスとして用意でき、戻り値の精度を向上できる。
入力部で入力した引数に対応した関数は、引数の逆数の演算であり、記憶部には、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値が、テーブルのインデックスとして規定され、取得部は、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値と、当該近似した値に1を加えた値をテーブルの複数のインデックスとして導出してもよい。
「引数のうちの仮数部を当該仮数部の上位ビットにより近似した値」とは、仮数部を構成する複数のビットのうち、上位から所定のビットを抽出した値に対応する。もとの仮数部のビット数と近似した値のビット数が異なる場合もあるが、ビットの配列において、ビットの同一のパターンが含まれているので、これを近似に含める。
入力部で入力した引数に対応した関数は、引数の平方根の演算であり、記憶部には、引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値が、テーブルのインデックスとして規定され、取得部は、入力した引数のうちの指数部の最下位のビット値と、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値と、当該形成された値に1を加えた値をテーブルの複数のインデックスとして導出してもよい。
「引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値」とは、仮数部を構成する複数のビットのうち、上位から所定のビットを抽出した値と、指数部の最下位のビット値を組み合わせた値である。ここで、近似に関しては、上記のとおりであってもよい。
本発明の別の態様は、演算方法である。この方法は、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予め記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、テーブルから複数の値をそれぞれ取得するステップと、変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備える。この方法によれば、取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に1を加えた数が、インデックスの数として規定されてもよい。
本発明のさらに別の態様は、プログラムである。このプログラムは、所定のインターフェースを介して、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予めメモリに記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいてメモリにアクセスすることによって、テーブルから複数の値をそれぞれ取得するステップと、変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備える。このプログラムによれば、取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に1を加えた数が、インデックスの数として規定されていることをコンピュータに実行させてもよい。
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
本発明によれば、浮動小数点の形式で表現した数値に対して演算を実行する際に、演算の処理量を軽減できる。
(実施例1)
本発明を具体的に説明する前に、概要を述べる。本発明の実施例1は、ディスプレイ等の表示装置に表示すべき画像を生成するために、ライティング計算や画像処理計算を実行する画像表示装置、特にその中で、浮動小数点数の逆数を計算する演算装置に関する。本実施例に係る演算装置は、引数として、符号部、指数部、仮数部で構成される浮動小数点数を入力し、符号部、指数部、仮数部に分離する。演算装置は、予め記憶した値と指数部との間で減算を実行する。なお、当該減算は、逆数に対応している。
また、逆数に対応するように仮数部を変換したした値がテーブルのエントリとして予め記憶されている。当該テーブルのインデックスは、指数部の上位ビットで形成されているが、インデックスの総数は、指数部の上位ビットで表現できる数に1を加えた数で規定されている。演算装置は、インデックスを生成するために、仮数部の上位ビットを抽出し、さらにふたつ目のインデックスを生成するために、抽出した上位ビットに1を加算する。その後、テーブルを参照しながら、生成したふたつのインデックスによって、ふたつのエントリに対応した値を取得する。演算装置は、ふたつのエントリに対応した値のそれぞれに対して、符号部と、減算した指数部をそれぞれ合成して、ふたつの仮の戻り値を生成する。最終的に、ふたつの仮の戻り値に内挿補間処理を実行して、戻り値を生成する。
演算装置は、指数部に対して減算を実行し、仮数部に対してテーブルにもとづく変換を実行しており、一般的に処理量の多い乗算および除算処理が内挿補間処理だけに使用されているので、全体の処理量を小さくできる。また、テーブルのインデックスを仮数部の上位の数ビットとしているので、テーブルの規模を小さくできる。また、テーブルの規模を小さくしながらも、内挿補間処理を実行するので、精度の低下を抑制できる。また、インデックスの総数は、指数部の上位の数ビットで表現できる数に1を加えた数で規定されているので、入力した引数に含まれた指数部の上位の数ビットが最大値であっても、演算装置は、内挿補間処理を実行できる。
本実施例における演算装置の構成を説明する前に、本実施例における逆数演算のアルゴリズムを説明する。図1は、本発明の実施例1に係る浮動小数点数のフォーマットを示す。符号部10は、数値の符号を反映しており、1ビット符号なし整数で構成されている。指数部12は、2のべき乗の整数値を表しており、8ビット符号なし整数で構成されている。仮数部14は、1.0から2.0の値を表しており、23ビット符号なし整数で構成されている。図示のごとく、符号部10をs、指数部12をe、仮数部14をmとすれば、これらは、次のような浮動小数点数を表現する。また、ここでは、次のxを関数の引数とする。
(数1)
x = (-1)s * 2e-127 * (1+m/223)
このように表現されたxによって、関数の戻り値の1/xを表現すれば次のようになる。
(数2)
1/x = 1/{(-1)s * 2e-127 * (1+m/223)}
このように表現された1/xを変形すれば、次のようになる。
(数3)
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)
ここで、指数部12を変換した値(以下、「変換指数部」という)をe’で示し、仮数部14を変換した値(以下、「変換仮数部」という)をm’で示せば、これらの値は、次のように示される。
(数4)
e’=253-e (ただしe≧254のときはe’=0)
m’=(223-m)/(223+m)*223
このような変換指数部と変換仮数部を使用すれば、1/xは、次のように示される。
(数5)
1/x = (-1)s * 2e’-127 * (1+m’/223)
つまり、これは、引数xの指数部12と仮数部14に対して、変換指数部と変換仮数部を導出すれば、xの逆数1/xが計算できることを意味する。ここで、変換指数部は、8ビットの減算処理で導出できるが、変換仮数部は、単純な演算器で導出できないので、テーブルを使用する。その際、仮数部14の23ビットをテーブルのインデックスとすれば、テーブルの規模が大きくなるので、仮数部14の上位8ビットをテーブルとする。これは、次のようにも示される。
(数6)
m’=table0[m[0:7]]
ここで table0[m[0:7]] は、仮数部14の上位8ビットをインデックスとして、テーブルから取得した値、すなわちエントリの値である。当該エントリの値が変換仮数部に対応する。なお、テーブルにおいて、1エントリのサイズは23ビットとする。i番目のエントリであるtable0[i]には、(223-i)/(223+i)*223の値が整数化して記憶されている。ただし、テーブルサイズが23ビットであるので、エントリにいれる値が223-1を超える場合はエントリの値は223-1としている。
しかしながら、エントリの値をひとつだけ抽出し、そのような値を変換仮数部として計算した場合、仮数部の精度が8ビット程度となる。そこで本実施例では、インデックスで表現できる数に1を加えた257個のエントリを持つテーブルを予め用意し、仮数部14の上位8ビットと当該値に1を加えた値から、隣接したふたつのインデックスを生成する。さらに、ふたつのインデックスから、ふたつのエントリの値を取り出し、このふたつのエントリの値を内挿補間処理し、さらに高精度な近似解を導出する。
以上のようなふたつのインデックスのうち、小さい方のインデックスから取得されたエントリの値を変換仮数部Aとし、大きい方のインデックスから取得されたエントリの値を変換仮数部Bとする。さらに、変換仮数部Aをm’とし、変換仮数部Bをm”とすれば、変換仮数部Aに対応した仮の戻り値(以下、「仮の戻り値A」という)aと変換仮数部Bに対応した仮の戻り値(以下、「仮の戻り値B」という)bは、次のように示される。
ここで、引数xに対して、指数部12に8ビットの整数演算を施し、仮数部14の上位8ビットをインデックスとしてエントリを1つ取得する。このようにして仮の戻り値Aが計算される。このとき、e’が負になる場合はe’の値は0とする。また、 仮の戻り値Bは、仮数部14の上位8ビットに1が加えられた値をインデックスとする以外、仮の戻り値Aと同様に導出される。
(数7)
e’=253-e
m’=table0[m[0:7]]
(数8)
a = (-1)-s * 2e’-127 * (1+m’/223)
(数9)
e’=253-e
m”=table0[m[0:7]+1]
(数10)
b = (-1)-s * 2e’-127 * (1+m”/223)
仮数部14の下位15ビットを32ビットの浮動小数点数に変換した値をcで示せば、1/xは次のように示される。
(数11)
c= m[8:22]/215
(数12)
1/x = (1/x1-1/x0)*(m[8:22]/215)+1/x0 = (b-a)*c+a
以上のごとく、1/xは、cにもとづいて、aとbを内挿補間することによって、導出される。このようなアルゴリズムによれば、指数部12の上位8ビットが最大値であっても、インデックス「256」と「257」によって内挿補間を実行できる。本実施例に係る演算装置は、数10から数12の処理を実行するように構成される。
なお、変換値である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の符号なし整数で表現できる。
図2は、本発明の実施例1に係る画像表示装置100の構成を示す。画像表示装置100は、画像処理部20、画像出力部22、演算装置24、記憶部38を含む。また、演算装置24は、入力部26、分離部28、第1変換部30、第2変換部32、取得部34、導出部36を含む。また、信号として、変換符号部200、変換指数部202、変換仮数部204、戻り値208を含む。
画像処理部20は、画像を生成するために、ライティング計算や画像処理計算を実行する。例えば、画像処理部20は、コンピュータグラフィックにおけるサーフェスモデル等によって、球体を生成するためにライティング計算を実行する。そのようなライティング計算は、正規化されたベクトルの導出に逆数の計算を必要とする。逆数の計算が必要になった場合に、画像処理部20は、演算装置24に引数を出力する。また、演算装置24から戻り値、すなわち計算された逆数を入力すれば、画像処理部20は当該逆数を使用しながら画像を生成する。画像出力部22は、画像処理部20で生成した画像を表示する。画像出力部22は、ディスプレイ等によって構成される。
入力部26は、図1のごとく、符号部10、指数部12、仮数部14を含んだ浮動小数点形式によって表現された関数の引数を入力する。なお、引数は画像処理部20から入力される。
分離部28は、入力した引数を符号部10、指数部12、仮数部14に分離する。分離部28は、符号部10を第1変換部30に出力し、指数部12を第2変換部32に出力し、仮数部14を取得部34および導出部36に出力する。
第1変換部30は、符号部10に対して所定の変換を行う。計算すべき関数が逆数の場合、数5のように、引数における符号部10と戻り値における符号部10は同一の値である。すなわち、第1変換部30は、入力した符号部10をそのまま導出部36に出力する。ここで、第1変換部30から導出部36に出力される符号部10は、変換符号部200と呼ばれる。
第2変換部32は、関数に応じて定められた指数部の変換規則によって、指数部12に含まれた指数部を変換する。ここで関数は逆数なので、変換規則は、数4、数7、数9のごとく、「253」から指数部12を減じる減算処理に対応する。ただし、符号部10が「254」以上の場合は「0」とする。減算した結果は、変換指数部202として導出部36に出力される。変換指数部202は、数4、数7、数9のe’に対応する。
記憶部38は、関数に応じて定められた仮数部の変換規則によって、仮数部14を変換した値をテーブルとして予め記憶する。ここで関数は逆数なので、変換規則は、数4のm’の計算式に対応する。記憶部38に記憶されたテーブルは、仮数部14の上位8ビットをインデックスとする。すなわち、引数を近似した値をインデックスとする。ここで、仮数部14の上位8ビットがとりうる値の総数は256であるが、前述のごとく、テーブルのインデックスの数は、256に1を加えた257に規定されている。また、記憶部38は、数4のm’をエントリとする。図3は、記憶部38に記憶されたテーブルのデータ構造を示す。「インデックス」が「0」から「256」まで、すなわち257個規定されている。また、「インデックス」にそれぞれ対応した「エントリ」が「C0」から「C256」まで記憶されている。ここで、「C0」は、数4のm’に対して、mに「0」を代入した値であり、「C1」は、mに「1」を代入した値である。
図2に戻る。取得部34は、仮数部14を構成する23ビットから上位8ビットを抽出することによって、すなわち仮数部14を上位8ビットで近似することによって、記憶部38に記憶したテーブルのインデックスを導出する。さらに、取得部34は、インデックスをふたつ導出するために、上位8ビットによって近似した仮数部14に対して、1を加えた数を導出する。以上の結果、取得部34は、ふたつのインデックスを導出する。その後、取得部34は、ふたつのインデックスにもとづいて、記憶部38に記憶したテーブルからふたつのエントリの値をそれぞれ取得する。すなわち、図3のテーブルにおいて、ふたつのインデックスに対応したふたつのエントリの値、すなわち変換仮数部204Aと変換仮数部204Bを取得する。取得したふたつのエントリの値が、数7のm’と数9のm”に対応する。なお、ふたつのエントリの値は、変換仮数部204として、導出部36に出力される。記憶部38がメモリ等の記憶媒体で構成される場合、インデックスはアドレスに対応してもよい。
導出部36は、取得部34で取得したふたつの変換仮数部204のそれぞれに対応するように、変換符号部200と変換指数部202を加えて、引数と同様の浮動小数点形式で表現された仮の戻り値Aと仮の戻り値Bをそれぞれ導出する。仮の戻り値Aは数8のaに対応し、仮の戻り値Bは数10のbに対応する。引数と同様の浮動小数点形式とは、図1に示したフォーマットであり、ここでは、左から変換符号部200、変換指数部202、変換仮数部204の順に並べられる。さらに、導出部36は、仮数部14の下位15ビットを使用しつつ、仮の戻り値Aと仮の戻り値Bに補間演算を施して関数の戻り値208を導出する。なお補間演算の前に、仮数部14の下位15ビットは、数11のごとく、浮動小数点数のcに変換される。a、b、cによる補間演算は、数12のような線形補間によって、実行される。
この構成は、ハードウエア的には、任意のコンピュータのCPU、メモリ、その他のLSIで実現でき、ソフトウエア的にはメモリのロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
図4は、導出部36の構成を示す。導出部36は、合成部40、補間部42を含む。合成部40は、変換符号部200、変換指数部202、変換仮数部204を合成することによって、仮の戻り値を生成する。変換仮数部204には、ふたつの値が含まれているので、それぞれに対応するように仮の戻り値Aと仮の戻り値Bが生成される。これらの生成は、図1のごとく、変換符号部200、変換指数部202、変換仮数部204を並べるだけの処理である。合成部40は、仮の戻り値Aと仮の戻り値Bを補間部42に出力する。
補間部42は、仮の戻り値Aと仮の戻り値Bに対して、線形補間を実行して戻り値208を生成する。線形補間を実行するために、仮数部14の下位15ビットを浮動小数点数に変換した値を使用する。前述のごとく、仮の戻り値A、仮の戻り値B、変換した値は、数12のa、b、cによって示され、戻り値208は数12の1/xによって示される。cは、仮数部14がインデックスに使用した仮数部14の上位8ビットの値にどれだけ近いかを示す指標となる。また、仮数部14の上位8ビットの値から離れていれば、それは、もうひとつのインデックスの値に近いことに相当する。
図5は、演算装置24による演算処理の手順を模式的に示す。入力部26は、32ビットの引数を入力する(S10)。分離部28は、入力した引数を分離する。すなわち1ビットの符号部10を抽出し(S12)、8ビットの指数部12を抽出し(S14)、仮数部14の上位8ビットを抽出する(S16)。第1変換部30は、符号部10を変換符号部200として出力する。第2変換部32は、固定値「253」を入力し(S20)、固定値と指数部12によって減算を実行して(S22)、変換指数部202を出力する。取得部34は、仮数部14の上位8ビットからふたつのインデックスを生成し(S24)、当該インデックスにもとづいて、記憶部38から変換仮数部204Aを取得しつつ(S26)、変換仮数部204Bも取得する(S28)。
合成部40は、変換符号部200、変換指数部202、変換仮数部204Aから仮の戻り値Aを生成する(S30)と共に、変換符号部200、変換指数部202、変換仮数部204Bから仮の戻り値Bを生成する(S32)。補間部42は、仮数部14の下位15ビットを抽出し(S18)、当該仮数部14の下位15ビットを浮動小数点数に変換する(S34)。さらに、補間部42は、変換した浮動小数点数にもとづいて、仮の戻り値Aと仮の戻り値Bを内挿補間して(S36)、戻り値を生成する。最終的に、32ビットの戻り値を出力する(S38)。
図6(a)−(b)は、演算装置24による近似解、すなわち数12の1/xと真の解との関係を示す。これらの図にもとづいて、本実施例では、補間が行われた場合に精度が向上する理由を説明する。図6(a)は、本実施例での補間処理による近似解を示す。横軸のSample point(A)とSample point(B)が、テーブルのインデックスに相当する離散的な値を示す。縦軸が、インデックスに対応したエントリおよび近似解を示す。
前述のごとく、Sample point(A)とSample point(B)における2点が、隣接するエントリを参照する2点で、AとBの間の近似解は線形補間によって計算される。本実施例では、線形補間係数が0.0であるSample pointにおける近似解、すなわちエントリの値そのものは、真の解を32ビットの浮動小数点で表現した値に対して、仮数部14の下位ビットをマスクしたものである。従って、入力がx≧0の場合は、Sample pointにおける近似解は真の解よりも小さくなる。ここで、入力が負の場合は原点対象になるのみで、本質は変わらないので、説明を省略する。また、真の解の二次微分係数は、次のように示される。
(数13)
(d2/dx2){1/x}=(d/dx){-1/x2}=2/x3
よって、x≧0のときは、常に曲線の二次微分係数は正となる。そのため、図示のごとく、下に膨らんだ曲線になる。すなわち、真の解と近似解の関係図は、図6(a)あるいは図6(b)のいずれかで示される。図6(a)では、隣接するSample point(A)とSample point(B)の区間における誤差は、中央部分において最小になる。一方、図6(b)では、Sample point(A)とSample point(B)の区間における誤差は、中央において最大になる。
しかしながら、本実施例では、浮動小数点数の仮数部14を8ビットのインデックスとしており、この場合の真の解とエントリの位置関係は、図6(b)のようなケースにはならず、図6(a)のようになる。このとき、Sample point(A)とSample point(B)の区間における誤差は、中央部分において最小になる。すなわち、Sample point(A)とSample point(B)の区間における近似解の精度は、Sampling pointにおける精度を下回らない。なお、以上の説明は、1/xに関するものであるが、それ以外の関数にも対応する。
本発明の実施例によれば、仮数部を近似した値でテーブルのインデックスを生成するので、テーブルのサイズを削減できる。また、近似した値がとりうる総数に1を加えた値が、インデックスの数として規定されているため、すべての近似した値に対して、複数のインデックスを生成でき、戻り値の精度を向上できる。また、指数部は、減算処理を実行するだけなので、処理量を削減できる。また、テーブルから取得した複数の値に対して補間処理を実行して戻り値を導出するので、戻り値の精度を向上できる。また、逆数の計算が、処理量を抑えつつも、高い精度によって実行される。また、補間処理のみに乗算が実行されるので、処理量を小さくできる。
また、浮動小数点数の演算が、1回の線形補間計算によって実行できるので、処理量を削減できる。また、少なくとも17ビットの精度を持つ逆数の計算が可能となる。また、テーブルは、257のインデックスを有した23ビットのエントリで逆数計算を実行できる。また、ひとつのエントリにおけるビットサイズを小さくして、精度とSRAM(Static Random Access Memory)容量のトレードオフを調整することもできる。
(実施例2)
本発明の実施例2は、実施例1と同様に、浮動小数点数の引数に対して逆数を計算する演算装置に関する。実施例2に係る演算装置は、実施例1と同様に、テーブルを参照しながら、ふたつのインデックスによって、ふたつのエントリに対応した値、すなわちふたつの変換仮数部を取得する。しかしながら、実施例1と異なって、演算装置は、ふたつの変換仮数部を内挿補間処理してから、内挿補間された値、変換符号部、変換指数部を合成して、戻り値を生成する。すなわち、内挿補間と合成の順番が実施例1と異なる。
実施例2に係る画像表示装置100は、図2に示した画像表示装置100と同じタイプであるので、説明を省略する。
図7は、本発明の実施例2に係る導出部36の構成を示す。導出部36は、補間部42、合成部40を含む。図7の導出部36は、図4の導出部36と比較して、合成部40と補間部42の順番が異なる。
補間部42は、図示しない取得部34から入力したふたつの変換仮数部204に対して、補間演算を施す。すなわち、変換仮数部204Aと変換仮数部204Bを線形補間する。補間部42は、線形補間を実行するために、仮数部14の下位15ビットを浮動小数点数に変換した値を使用する。具体的には、数12におけるaをm’に置き換え、bをm”に置き換えることによって線形補間を実行し、数12における1/xの代わりの値(以下、「補間仮数部」という)が得られる。なお、c等の性質は、実施例1と同様であるので、説明を省略する。また、補間部42は、合成部40に補間仮数部を出力する。
合成部40は、変換符号部200、変換指数部202、補間仮数部を合成することによって、戻り値208を生成する。これらの生成は、図1のごとく、変換符号部200、変換指数部202、補間仮数部を左から並べるだけの処理である。合成部40は、戻り値208を出力する。
図8は、演算装置24による演算処理の手順を模式的に示す。ステップ50からステップ68は、図5のステップ10からステップ28にそれぞれ対応するので、説明を省略する。補間部42は、仮数部14の下位15ビットを使用しつつ、変換仮数部Aと変換仮数部Bを内挿補間して(S70)、補間仮数部を生成し、合成部40に出力する。合成部40は、変換符号部200、変換指数部202、補間仮数部を合成して、関数の戻り値を生成する(S72)。さらに、32ビットの戻り値を出力する(S74)。
本発明の実施例によれば、実施例1と同様の効果がえられる。また、仮の戻り値よりもビット数の少ない変換仮数部に対して、補間計算を実行するので、処理量を削減できる。また、処理量が少ないので、処理速度が速くなる。また、消費電力を小さくできる。
(実施例3)
本発明の実施例3は、これまでの実施例と異なって、浮動小数点数の引数に対して平方根の逆数を計算する演算装置に関する。実施例3に係る演算装置は、これまでと同様に、引数を符号部、指数部、仮数部に分離して、指数部から減算によって変換指数部を導出しつつ、変換仮数部をテーブルのエントリとして記憶しておき、ふたつのインデックスからふたつの変換仮数部を取得する。さらに、ふたつの変換仮数部に対してそれぞれ符号部と指数部を合成することによって、ふたつの仮の戻り値を導出する。最終的に、ふたつの仮の戻り値に対して内挿補間を実行して、戻り値を導出する。
しかしながら、これまでの実施例とは別のインデックスの導出方法を使用する。インデックスのビット数は、8ビットであるが、その内容は指数部の最下位の1ビットと仮数部の上位7ビットを組み合わせた値である。詳細は後述するが、平方根の逆数の場合、指数部が偶数か奇数かによって、変換仮数部の値が異なってくる。そこで、インデックスの最上位ビットに、指数部が偶数か奇数かを示すビットを挿入し、それぞれのインデックスに対応した値をエントリとすることによって、指数部の偶奇性を考慮したテーブルを実現できる。
また、以上のようにテーブルを構成したために、インデックスが連続した値であるにもかかわらず、エントリが連続した値にならない場合がある。すなわち、インデックスの最小ビットが0であり、かつ下位ビットがすべて1になる値と、その次のインデックスの最小ビットが1であり、かつ下位ビットがすべて0になる値である。これらは、前述のごとく、それぞれ偶数の指数部と奇数の指数部とに対応した変換仮数部の値であるので、不連続になる。本実施例に係る演算装置は、このような不連続の場合に処理を工夫して、同一のテーブルを使用しつつ、正常な値を出力する。なお、これまでの実施例と同様に、インデックスの数は、8ビットによって表現できる数に1を加えた数とする。
本実施例における演算装置の構成を説明する前に、本実施例における平方根の逆数演算のアルゴリズムを説明する。実施例1の数1と同様に、関数の引数のxを表現すれば、1/√|x|は、次のように示される。
(数14)
1/√|x| = 1/√|(-1)s * 2e-127 * (1+m/223)|
= 1/√{(-1)0 * 2e-127 * (1+m/223)}
これを変形すれば、以下のように示される。
(数15)
1/√|x| = √{(-1)0 } * √{2127-e }* √{1/(1+m/223)}
= (-1)0 * √{2127-e-1 }* √{2/(1+m/223)}
ここで、指数部12が偶数の場合と奇数の場合を分類して、式を展開する。指数部12が偶数の場合は、以下のようになる。
(数16)
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)}
ここで、変換指数部202であるe’と、変換仮数部204であるm’を以下のように定義する。
(数17)
e’=190-e/2
m’=(√{1+(1-m/223)/(1+m/223)}-1)*223
これらを使用すれば、1/√|x|は次のように示される。
(数18)
1/√|x| = (-1)0 * 2e’-127 * (1+m’/223)
一方、指数部12が奇数の場合に、数15は以下のように展開される。
(数19)
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)}
ここで、変換指数部202であるe’と、変換仮数部204であるm’を以下のように定義する。
(数20)
e’=190-(e+1)/2
m’=(√{2+2(1-m/223)/(1+m/223))}-1)*223
これらを使用すれば、1/√|x|は次のように示される。
(数21)
1/√|x| = (-1)0 * 2e’-127 * (1+m’/223)
すなわち、指数部12が偶数であるか奇数であるかに応じて、数17と数20のように変換指数部202と変換仮数部204とを変えれば、数18と数21のように、1/√|x|は同一の式で表現される。以上の処理は、指数部12が偶数であるか奇数であるかによって処理内容が変わるので、分岐処理を必要とする。このような分岐処理を避けるために、本実施例では、指数部12の下位1ビットと仮数部14の上位7ビットを組み合わせた8ビットの値をインデックスとして規定する。
このようにして、指数部12の下位1ビットは、偶数奇数を判別するために使用される。すなわち、インデックスを形成する8ビットのうちの上位1ビットが偶数であるか奇数であるかを表しているので、偶数のときは「0」から「127」のインデックスおよびそれに対応したエントリを使用し、奇数のときは「128」から「255」のインデックスおよびそれに対応したエントリを使用する。このように、予め偶数用と奇数用とに分けたエントリの値が、テーブルに記憶される。つまり、数17と数20のように偶数と奇数とに分けて表されている変換仮数部204の値が、テーブルの半分ずつのエントリに収納される。
さらに、実施例1と同様に、257個のインデックスおよびエントリを有するテーブルを用意しておき、8ビットのインデックスから、隣接するふたつのエントリを取得し、このふたつのエントリの値を使用して近似解を求める。
仮の戻り値Aは、次のように示される。
(数22)
a = (-1)-s * 2e’-127 * (1+m’/223)
変換指数部202と変換仮数部204は、次のように示される。
(数23)
e’=(380-e)/2
m’=table0[e[7]m[0:6]]
ここで table0[e[7]m[0:6]] は、指数部12の下位1ビットと仮数部14の上位7ビットをインデックスとして、テーブルから取得した値、すなわちエントリの値である。また、当該エントリの値が変換仮数部204に対応する。なお、テーブルにおいて、1エントリのサイズは23ビットとする。i番目のエントリであるtable0[i]には、数17あるいは数20でのm’の値が整数化されて記憶されている。
一方、仮の戻り値Bは、次のように示される。
(数24)
b = (-1)-s * 2e’-127 * (1+m’/223)
変換指数部202は、次のように示される。
(数25)
e’=(379-e)/2 (e[7]m[0:6]が127の場合)
(数26)
e’=(380-e)/2 (e[7]m[0:6]が127以外の場合)
変換仮数部204は、次のように示される。
(数27)
m’=table0[e[7]m[0:6]+1]
数25と数26において、e[7]m[0:6]が127のときとそれ以外のときによって、処理が異なる。この理由を述べる。e[7]m[0:6]が127のとき、線形補間に使用される2つ目の値b、すなわち変換仮数部204Bを求める際のインデックスe[7]m[0:6]+1は、「1」の最上位ビットを有する。そのため、aとbの連続性が保たれない。さらに詳細に説明すると、インデックス「127」と「128」に対応したエントリは、前述のごとく、偶数に対応したエントリと奇数に対応したエントリを使い分けていた境界である。そのため、aを生成するためのインデックス(e[7]m[0:6])が127のときに、bを生成するためのインデックス(e[7]m[0:6]+1)が128になり、本来奇数用に作られたエントリが使用される。その結果、aとbが連続しなくなる。この差を埋めるために、8ビットの値(e[7]m[0:6])が127のときには、e'の値が1だけ小さくなるように補正を実行する。それが数25に対応する。
仮数部14の下位16ビットを32ビットの浮動小数点数に変換した値をcで示せば、1/√|x|は次のように示される。
(数28)
c= m[7:22]/216
(数29)
1/√|x| = ( 1/√|x1| - 1/√|x0| )*(m[7:22]/216)+ 1/√|x0| = (b-a)*c+a
以上のごとく、1/√|x|は、cにもとづいて、aとbを内挿補間することによって、導出される。本実施例に係る演算装置は、数22から数29の処理を実行するように構成される。
なお、変換した値であるe’,m’が適正な範囲であることを確認する。まず、0≦e≦255であるので、e’は-190の値をとりうる。m’に対して、次のように示される。
(数30)
m’=(√{1+(1-m/223)/(1+m/223))}-1)*223 (e=偶数のとき)
そのため、次のように示される。
(数31)
0<m’≦(√{2} - 1)*223<223
(数32)
m’=(√{2+2(1-m/223)/(1+m/223))}-1)*223 (e=奇数のとき)
そのため、次のように示される。
(数33)
(√{2} - 1)*223<m’≦223
ただし、前述のとおりm'はテーブルから求めているため、m’<223である。そのため、次のように示される。
(数34)
(√{2} - 1)*223<m’<223
数31と数34をあわせると次のようになる。
(数35)
0<m’<223
すなわち、変換指数部202であるe’は8ビットの符号なし整数によって表現でき、変換仮数部204であるm’は23ビットの符号なし整数で表現できる。
実施例2に係る画像表示装置100は、図2に示した画像表示装置100と同じタイプである。しかしながら、一部の構成および構成要素の機能が異なる。ここでは、異なっている部分を中心に説明する。
分離部28は、実施例1と同様に、入力した引数を符号部10、指数部12、仮数部14に分離する。分離部28は、取得部34に対して、指数部12の下位1ビットと仮数部14を出力する。ここで、分離部28から取得部34へ指数部12の下位1ビットを出力するための信号線は、図2に図示されていない。第1変換部30は、符号部10を正の値に変換し、変換符号部200として導出部36に出力する。第2変換部32は、数25あるいは数26の計算を実行する。当該計算は、実施例1と異なって、2による除算を含んでいる。しかしながら、2による除算は、ビットシフトで実現可能であるので、実質的な処理量の増加は小さい。
記憶部38は、関数に応じて定められた仮数部の変換規則によって、仮数部14を変換した値をテーブルとして予め記憶する。ここで関数は平方根の逆数なので、変換規則は、数17のm’あるいは数20のm’の計算式に対応する。すなわち、指数部12の下位1ビットが「0」ならば、数17のm’をエントリとし、指数部12の下位1ビットが「1」ならば、数20のm’をエントリとする。前者は指数部12が偶数である場合に相当し、後者は指数部12の下位1ビットが奇数である場合に相当する。
記憶部38に記憶されたテーブルは、少なくとも仮数部14を含むように、指数部12の下位1ビットと仮数部14の上位7ビットをインデックスとする。このように、引数をこれらの値によって近似した値をインデックスとする。また、これまでと同様に、テーブルのインデックスの数は、256に1を加えた257に規定されている。
図9は、本発明の実施例3に係る記憶部38に記憶されたテーブルのデータ構造を示す。図9の「インデックス」と「エントリ」は、図3の「インデックス」と「エントリ」にそれぞれ対応する。インデックスの数は、図3と同様に「0」から「256」までの257だけ規定されている。「0」から「127」のインデックスは、指数部12の下位1ビットが0である場合に相当し、それに対応したエントリは数17のm’に相当する。また、「128」から「256」のインデックスは、指数部12の下位1ビットが1である場合に相当し、それに対応したエントリは数20のm’に相当する。
実施例3に係る画像表示装置100の説明に戻る。以上の結果、取得部34は、ふたつのインデックスを導出する。その後、取得部34は、ふたつのインデックスにもとづいて、記憶部38に記憶したテーブルからふたつのエントリの値をそれぞれ取得する。すなわち、図3のテーブルにおいて、ふたつのインデックスに対応したふたつのエントリを取得する。取得したふたつのエントリが、数7のm’と数9のm”に対応する。なお、ふたつのエントリは、変換仮数部204として、導出部36に出力される。
取得部34は、仮数部14の上位7ビットと、指数部12の下位1ビットとを合成することによって、すなわち少なくとも仮数部14を近似することによって、記憶部38に記憶したテーブルのインデックスを導出する。さらに、取得部34は、インデックスをふたつ導出するために、前述のインデックスに1を加えた数を導出する。その後、導出したふたつのインデックスにもとづいて、記憶部38からふたつの変換仮数部204を取得する過程は、実施例1と同様であるので、説明を省略する。
導出部36は、変換符号部200、変換指数部202、ふたつの変換仮数部204から仮の戻り値Aと仮の戻り値Bを生成する。さらに、仮の戻り値Aと仮の戻り値Bに対して、補間処理を施して戻り値208を生成する。ここで、仮の戻り値を生成する処理は、数22と数24に対応し、補間処理は、数28と数29に従う。また、これらの処理は実施例1に準じるので、説明を省略する。
また、取得部34において、ふたつのインデックスの値が「127」と「128」である場合、すなわち、ふたつのインデックスに対応して記憶部38に記憶されたエントリの値が不連続である場合に、以下の処理を実行する。所定の指示にもとづいて、第2変換部32は、変換指数部202から所定の値を減じた値も導出する。これは、数25に相当する。導出部36は、仮の戻り値Aを通常通りに生成する。一方、仮の戻り値Bは、変換指数部202として、変換指数部202から1を減算した値を使用しつつ生成する。さらに、仮の戻り値Aと仮の戻り値Bにもとづいて戻り値208を導出する。この処理の原理を説明する。図9のエントリ「127」の値は「0x4030」であり、エントリ「128」の値は「0x7fffff」である。仮に、エントリ「128」が「0x000000」であれば、数26によって、仮の戻り値Bを導出できるが、実際は、奇数用の別の値「0x7fffff」が記憶されているので、指数部を1だけ下げることによって、近似している。つまり、以下の関係を利用する。
(数36)
2^(e-127) * ( 0x000000 / 0x800000 )
≒2^(e-127-1) * ( 0x7fffff / 0x800000 )
図10は、演算装置24による演算処理の手順を模式的に示す。入力部26は、32ビットの引数を入力する(S100)。分離部28は、入力した引数を分離する。すなわち1ビットの符号部10を抽出し(S102)、8ビットの指数部12を抽出し(S104)、指数部12の下位1ビットと仮数部14の上位7ビットを抽出する(S106)。第1変換部30は、符号部10を正の値に変換し(S110)、変換符号部200として出力する。第2変換部32は、固定値「380」を入力し(S112)、固定値と指数部12によって、数26のような整数演算を実行して(S114)、変換指数部202を出力する。なお、数25のような整数演算に関しては、説明を省略する。取得部34は、指数部12の下位1ビットと仮数部14の上位7ビットからふたつのインデックスを生成し(S116)、当該インデックスにもとづいて、記憶部38から変換仮数部204Aを取得しつつ(S118)、変換仮数部204Bも取得する(S120)。
導出部36は、変換符号部200、変換指数部202、変換仮数部204Aから仮の戻り値Aを生成する(S122)と共に、変換符号部200、変換指数部202、変換仮数部204Bから仮の戻り値Bを生成する(S124)。さらに、導出部36は、仮数部14の下位16ビットを抽出し(S108)、当該仮数部14の下位16ビットを浮動小数点数に変換する(S126)。導出部36は、変換した浮動小数点数にもとづいて、仮の戻り値Aと仮の戻り値Bを内挿補間して(S128)、戻り値を生成する。最終的に、32ビットの戻り値を出力する(S130)。
本発明の実施例によれば、指数部と仮数部との値を近似した値でテーブルのインデックスを生成するので、テーブルのサイズを削減できる。また、近似した値がとりうる総数に1を加えた値が、インデックスの数として規定されているため、すべてのインデックスに対して、複数のインデックスを生成でき、平方根の逆数の戻り値の精度を向上できる。また、指数部は、減算処理とビットシフトを実行するだけなので、処理量を削減できる。また、テーブルから取得した複数の値に対して補間処理を実行して戻り値を導出するので、平方根の逆数の戻り値の精度を向上できる。また、補間処理のみに乗算が実行されるので、処理量を小さくできる。
また、平方根の逆数の計算が、処理量を抑えつつも、高い精度によって実行できる。また、インデックスに指数部の下位1ビットを含めるので、指数部が偶数であるか奇数であるかにかかわらず、ひとつのテーブルに変換仮数部を記憶できる。また、テーブルから取得したふたつの値が連続した値でなくても、変換指数部の値を小さくするような処理を施すので、ふたつの値の連続性を維持できる。また、少なくとも16ビットの精度を持つ平方根の逆数の計算が可能となる。また、257のインデックスを有した23ビットのエントリを有したテーブルにもとづいて、平方根の逆数の計算を実行できる。
(実施例4)
本発明の実施例3は、浮動小数点数の引数に対して平方根を計算する演算装置に関する。実施例4に係る演算装置は、実施例3に係る演算装置と同様の構成によって、平方根を計算できる。
本実施例における演算装置の構成を説明する前に、本実施例における平方根の演算のアルゴリズムを説明する。本アルゴリズムは、平方根の逆数演算のアルゴリズムとほぼ同じであるので、式だけを記述する。
√|x|は、次のように示される。
(数37)
√|x| = √|(-1)s * 2e-127 * (1+m/223)|
= √{(-1)0 * 2e-127 * (1+m/223)}
1/√|x|と同様に展開すると、仮の戻り値Aは、次のように示される。
(数38)
a = (-1)-s * 2e’-127 * (1+m’/223)
ここで、変換指数部202と変換仮数部204は、次のように示される。
(数39)
e’=(e+127)/2
m’=table0[e[7]m[0:6]]
一方、仮の戻り値Bは、次のように示される。
(数40)
b = (-1)-s * 2e’-127 * (1+m’/223)
変換指数部202は、次のように示される。
(数41)
e’=(e+129)/2 (e[7]m[0:6]が127の場合)
(数42)
e’=(e+127)/2 (e[7]m[0:6]が127以外の場合)
変換仮数部204は、次のように示される。
(数43)
m’=table0[e[7]m[0:6]+1]
仮数部14の下位16ビットを32ビットの浮動小数点数に変換した値をcで示せば、√|x|は次のように示される。
(数44)
c= m[7:22]/216
(数45)
√|x| = (√|x1|-√|x0|)*(m[7:22]/216)+ √|x0| = (b-a)*c+a
実施例4に係る画像表示装置100は、実施例3に係る画像表示装置100と同じタイプである。両者の違いは、第2変換部32が数41と数42に対応していることと、記憶部38に記憶されたエントリの値が、数37に対応していることである。そのため、画像表示装置100の説明を省略する。
本発明の実施例によれば、実施例3に記載した効果が得られつつ、平方根の演算を実行できる。
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
本発明の実施例1と2において、第2変換部32は、固定値と指数部12との間で減算処理を実行している。しかしながらこれに限らず例えば、第2変換部32は、加算処理を実行してもよい。この場合、指数部12の符号を反転させて、固定値に加算する。本変形例によれば、第2変換部32の構成が多様になる。つまり、乗算処理のような処理量の多い処理でなければよい。
本発明の実施例1から4において、取得部34は、ふたつのインデックスを生成し、当該ふたつのインデックスにもとづいて、記憶部38からふたつの変換仮数部204を取得している。しかしながらこれに限らず例えば、取得部34は、複数のインデックスを生成し、当該複数のインデックスにもとづいて、記憶部38から複数の変換仮数部204を取得してもよい。この場合、内挿補間の処理が、複数の変換仮数部204あるいは複数の仮の戻り値に対応できるように、変形される。本変形例によれば、近似値の精度を高められる。つまり、ふたつ以上の変換仮数部204が使用されればよい。
本発明の実施例1から4において、演算装置24によってなされる逆数、平方根の逆数、平方根の演算を説明した。しかしながらこれに限らず例えば、演算装置24はこれら以外の関数を計算してもよい。本変形例によれば、さまざまな関数に本発明を提供できる。つまり、浮動小数点数で表現された引数に対する演算であればよい。
本発明の実施例1から4において、演算装置24は、逆数、平方根の逆数、平方根のいずれかひとつの演算を実行していた。しかしながらこれに限らず例えば、演算装置24は、複数の関数を演算できてもよい。その場合、記憶部38には、複数の関数に対応したエントリが予め記憶されており、また演算装置24には、演算を実行すべき関数の種類を示した指示が入力される。演算装置24は、指示に従って、第1変換部30等の処理方法を特定して、演算を実行する。本変形例によれば、演算装置24の回路規模の増加量を抑えながら、さまざまな関数に対応させられる。つまり、浮動小数点数で表現された引数に対する演算であればよい。
本発明の実施例1から2の任意の組み合わせも有効である。本変形例によれば、組み合わせに対応した効果が得られる。
本発明の実施例1に係る浮動小数点数のフォーマットを示す図である。 本発明の実施例1に係る画像表示装置の構成を示す図である。 図2の記憶部に記憶されたテーブルのデータ構造を示す図である。 図2の導出部の構成を示す図である。 図2の演算装置による演算処理の手順を模式的に示す図である。 図6(a)−(b)は、図2の演算装置による近似解と真の解との関係を示す図である。 本発明の実施例2に係る導出部の構成を示す図である。 図7の導出部を含んだ演算装置による演算処理の手順を模式的に示す図である。 本発明の実施例3に係る記憶部に記憶されたテーブルのデータ構造を示す図である。 図9の記憶部を含んだ演算装置による演算処理の手順を模式的に示す図である。
符号の説明
10 符号部、 12 指数部、 14 仮数部、 20 画像処理部、 22 画像出力部、 24 演算装置、 26 入力部、 28 分離部、 30 第1変換部、 32 第2変換部、 34 取得部、 36 導出部、 38 記憶部、 40 合成部、 42 補間部、 100 画像表示装置、 200 変換符号部、 202 変換指数部、 204 変換仮数部、 208 戻り値。

Claims (10)

  1. 指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力する入力部と、
    関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換する変換部と、
    関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値をテーブルとして予め記憶する記憶部と、
    入力した引数のうちの少なくとも仮数部を近似することによって、前記記憶部に記憶したテーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、前記記憶部に記憶したテーブルから複数の値をそれぞれ取得する取得部と、
    変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力する導出部とを備え、
    前記記憶部には、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に1を加えた数が、前記テーブルのインデックスの数として規定されていることを特徴とする演算装置。
  2. 前記変換部は、前記指数部の変換規則として、前記入力した引数に含まれた指数部に加減演算を実行し、
    前記取得部は、入力した引数のうちの少なくとも仮数部を近似した値と、当該近似した値に1を加えた値を前記テーブルの複数のインデックスとして導出し、
    前記導出部は、前記変換した指数部を使用しつつ、前記取得した複数の値をもとにした補間演算によって、前記関数の戻り値を導出することを特徴とする請求項1に記載の演算装置。
  3. 前記入力部で入力した引数に対応した関数は、引数の逆数の演算であり、
    前記記憶部には、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値が、前記テーブルのインデックスとして規定され、
    前記取得部は、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値と、当該近似した値に1を加えた値を前記テーブルの複数のインデックスとして導出することを特徴とする請求項2に記載の演算装置。
  4. 前記導出部は、前記取得部で取得した複数の値のそれぞれに対応するように、前記引数と同様の浮動小数点形式で表現されたふたつの仮の戻り値をそれぞれ導出し、前記ふたつの仮の戻り値に補間演算を施して前記関数の戻り値を導出することを特徴とする請求項3に記載の演算装置。
  5. 前記導出部は、前記取得部で取得した複数の値に補間演算を施し、補間演算の結果と前記変換した指数部から、前記関数の戻り値を導出することを特徴とする請求項3に記載の演算装置。
  6. 前記入力部で入力した引数に対応した関数は、引数の平方根の演算であり、
    前記記憶部には、引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値が、前記テーブルのインデックスとして規定され、
    前記取得部は、入力した引数のうちの指数部の最下位のビット値と、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値と、当該形成された値に1を加えた値を前記テーブルの複数のインデックスとして導出することを特徴とする請求項2に記載の演算装置。
  7. 前記入力部で入力した引数に対応した関数は、引数の平方根の逆数の演算であり、
    前記記憶部には、引数のうちの指数部の最下位のビット値と、引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値が、前記テーブルのインデックスとして規定され、
    前記取得部は、入力した引数のうちの指数部の最下位のビット値と、入力した引数のうちの仮数部を当該仮数部の上位ビットにより近似した値によって形成される値と、当該形成された値に1を加えた値を前記テーブルの複数のインデックスとして導出することを特徴とする請求項2に記載の演算装置。
  8. 前記変換部は、前記取得部で形成された値をインデックスとして、前記記憶部に記憶したテーブルから取得した第1の値と、前記形成された値に1を加えた値をインデックスとして、前記記憶部に記憶したテーブルから取得した第2の値とが不連続である場合に、入力した引数に含まれた指数部を変換する際に、変換した指数部から所定の値を減じた値も導出し、
    前記導出部は、前記第1の値および前記変換部で変換した指数部、ならびに前記第2の値および前記変換した指数部から所定の値を減じた値よりふたつの仮の戻り値をそれぞれ導出し、前記ふたつの仮の戻り値に補間演算を施して前記関数の戻り値を導出することを特徴とする請求項6または7に記載の演算装置。
  9. 指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、
    関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、
    関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予め記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、前記テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて、前記テーブルから複数の値をそれぞれ取得するステップと、
    変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備え、
    前記取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に1を加えた数が、インデックスの数として規定されていることを特徴とする演算方法。
  10. 所定のインターフェースを介して、指数部と仮数部を含んだ浮動小数点形式で表現された関数の引数を入力するステップと、
    関数に応じて定められた指数部の変換規則によって、入力した引数に含まれた指数部を変換するステップと、
    関数に応じて定められた仮数部の変換規則によって、引数に含まれる仮数部を変換した値を予めメモリに記憶したテーブルを参照するために、入力した引数のうちの少なくとも仮数部を近似することによって、前記テーブルの複数のインデックスをそれぞれ導出し、導出した複数のインデックスにもとづいて前記メモリにアクセスすることによって、前記テーブルから複数の値をそれぞれ取得するステップと、
    変換した指数部と取得した複数の値にもとづいて、引数と同様の浮動小数点形式で表現された関数の戻り値を導出して出力するステップとを備え、
    前記取得するステップで参照すべきテーブルには、引数のうちの少なくとも仮数部の近似値がとりうる値の総数に1を加えた数が、インデックスの数として規定されていることをコンピュータに実行させるためのプログラム。
JP2004248395A 2004-08-27 2004-08-27 演算方法および装置 Pending JP2006065633A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2004248395A JP2006065633A (ja) 2004-08-27 2004-08-27 演算方法および装置
PCT/JP2005/007250 WO2006022048A1 (ja) 2004-08-27 2005-04-14 演算方法および装置
US11/661,375 US8694567B2 (en) 2004-08-27 2005-04-14 Method and apparatus for arithmetic operation on a value represented in a floating-point format
EP05730631A EP1783601A1 (en) 2004-08-27 2005-04-14 Operation method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004248395A JP2006065633A (ja) 2004-08-27 2004-08-27 演算方法および装置

Publications (1)

Publication Number Publication Date
JP2006065633A true JP2006065633A (ja) 2006-03-09

Family

ID=35967269

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004248395A Pending JP2006065633A (ja) 2004-08-27 2004-08-27 演算方法および装置

Country Status (4)

Country Link
US (1) US8694567B2 (ja)
EP (1) EP1783601A1 (ja)
JP (1) JP2006065633A (ja)
WO (1) WO2006022048A1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008071336A (ja) * 2006-07-25 2008-03-27 Vivante Corp 同一の技術に基づくrcp,sqrt,expおよびlog関数の単一データパス浮動小数点実行及び少ない待ち時間のrcp
JP2010249663A (ja) * 2009-04-16 2010-11-04 Hioki Ee Corp 測定値変換装置および測定値変換方法
JP2012069116A (ja) * 2010-09-24 2012-04-05 Arm Ltd ベクトル浮動小数点引数削減
JP2013214305A (ja) * 2012-03-30 2013-10-17 Apple Inc 級数展開を使用する超越的及び非直線的コンポーネント

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100640807B1 (ko) * 2005-08-09 2006-11-02 엘지전자 주식회사 선형보간을 이용한 루트연산방법 및 이를 구현할 수 있는이동통신단말기
US8745111B2 (en) 2010-11-16 2014-06-03 Apple Inc. Methods and apparatuses for converting floating point representations

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03286212A (ja) * 1990-03-29 1991-12-17 Yokogawa Electric Corp 正弦波データ発生回路
JPH04314126A (ja) * 1991-04-12 1992-11-05 Nec Corp 逆数発生装置
JPH07248841A (ja) * 1994-03-09 1995-09-26 Mitsubishi Electric Corp 非線形関数発生装置およびフォーマット変換装置
JP2002244843A (ja) * 2000-12-20 2002-08-30 Sicon Video Corp 逆数を計算するための方法および装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61292742A (ja) * 1985-06-20 1986-12-23 Matsushita Electric Ind Co Ltd 演算装置
JPS6278629A (ja) * 1985-10-02 1987-04-10 Hitachi Denshi Ltd 逆数値演算方式
JPH06278629A (ja) 1993-03-26 1994-10-04 Mazda Motor Corp 車両の操舵装置
JPH0926954A (ja) 1995-07-12 1997-01-28 Ricoh Co Ltd 補間装置およびその方式
US6223192B1 (en) * 1997-10-23 2001-04-24 Advanced Micro Devices, Inc. Bipartite look-up table with output values having minimized absolute error
JP2003029961A (ja) * 2001-07-11 2003-01-31 Sony Corp 除算方法および除算装置
US6976043B2 (en) * 2001-07-30 2005-12-13 Ati Technologies Inc. Technique for approximating functions based on lagrange polynomials
US7440987B1 (en) * 2003-02-25 2008-10-21 Qualcomm Incorporated 16 bit quadrature direct digital frequency synthesizer using interpolative angle rotation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03286212A (ja) * 1990-03-29 1991-12-17 Yokogawa Electric Corp 正弦波データ発生回路
JPH04314126A (ja) * 1991-04-12 1992-11-05 Nec Corp 逆数発生装置
JPH07248841A (ja) * 1994-03-09 1995-09-26 Mitsubishi Electric Corp 非線形関数発生装置およびフォーマット変換装置
JP2002244843A (ja) * 2000-12-20 2002-08-30 Sicon Video Corp 逆数を計算するための方法および装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008071336A (ja) * 2006-07-25 2008-03-27 Vivante Corp 同一の技術に基づくrcp,sqrt,expおよびlog関数の単一データパス浮動小数点実行及び少ない待ち時間のrcp
JP2010249663A (ja) * 2009-04-16 2010-11-04 Hioki Ee Corp 測定値変換装置および測定値変換方法
JP2012069116A (ja) * 2010-09-24 2012-04-05 Arm Ltd ベクトル浮動小数点引数削減
US9146901B2 (en) 2010-09-24 2015-09-29 Arm Limited Vector floating point argument reduction
JP2013214305A (ja) * 2012-03-30 2013-10-17 Apple Inc 級数展開を使用する超越的及び非直線的コンポーネント
US9015217B2 (en) 2012-03-30 2015-04-21 Apple Inc. Transcendental and non-linear components using series expansion

Also Published As

Publication number Publication date
US20080104160A1 (en) 2008-05-01
EP1783601A1 (en) 2007-05-09
US8694567B2 (en) 2014-04-08
WO2006022048A1 (ja) 2006-03-02

Similar Documents

Publication Publication Date Title
US8745111B2 (en) Methods and apparatuses for converting floating point representations
US7188133B2 (en) Floating point number storage method and floating point arithmetic device
JP4635087B2 (ja) 拡張関数のための向上した浮動小数点演算部
US20060250397A1 (en) Graphics processing unit and graphics processing system
CN106575214B (zh) 融合乘加运算的模拟
US20120259904A1 (en) Floating point format converter
US8639737B2 (en) Method to compute an approximation to the reciprocal of the square root of a floating point number in IEEE format
US20120059866A1 (en) Method and apparatus for performing floating-point division
US10747501B2 (en) Providing efficient floating-point operations using matrix processors in processor-based systems
US10416962B2 (en) Decimal and binary floating point arithmetic calculations
US10019232B2 (en) Apparatus and method for inhibiting roundoff error in a floating point argument reduction operation
WO2006022048A1 (ja) 演算方法および装置
CN108139912B (zh) 在浮点运算期间计算和保留误差边界的装置和方法
CN112651496A (zh) 一种处理激活函数的硬件电路及芯片
KR100847934B1 (ko) 스케일링된 정수를 사용하는 부동 소수점 연산
US7366745B1 (en) High-speed function approximation
JP2007293863A (ja) データレベル並行性を使用する四面体補間計算のための方法
US20130060829A1 (en) Method and apparatus for additive range reduction
JP4163967B2 (ja) 浮動小数点演算装置
US20240134608A1 (en) System and method to accelerate microprocessor operations
TWI753668B (zh) 資訊處理裝置、電腦程式、記錄媒體及資訊處理方法
CN116070689A (zh) 模型的量化训练方法、装置、电子设备及可读存储介质
KR100425674B1 (ko) 디지탈신호처리기의부동소숫점형식곱셈방법
Moore Specialized Multiplier Circuits
CN113778376A (zh) 改进的用于执行乘法/累加运算的设备

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070313

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070410

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070731