(57)【要約】【課題】従来に比べて演算に要するサイクル数を削減し、浮動小数点型データにおける所定の演算を、従来に比べて高速に行うことができるようする。【解決手段】演算装置として浮動小数点演算器を使用しないで整数演算器１３のみ使用し、浮動小数点のシフト演算を実現する。浮動小数点数を値として注目するのではなく、そのビット配列に注目し、ビット配列を整数演算器１３で操作することでシフト演算と同等の演算を実現する。最終的な演算結果である汎用レジスタ１２におけるの変数ｖａｒ３のビット配列を、そのままメモリ１１にストアする。ｖａｒ３の値を書き込んだメモリ１１の領域を単精度浮動小数点型データとみなしてアクセスすれば、浮動小数点数ｘのシフト演算の結果として値を利用できる。【選択図】      図１
2005031848.tif 000002
【特許請求の範囲】
【請求項１】
下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける所定の演算をコンピュータで行う浮動小数点演算の方法であって、
以下の浮動小数点型データにおける演算を、整数演算手段による整数演算のみで行う
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
ことを特徴とする浮動小数点演算の方法。
【請求項２】
前記演算式による演算が、
シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとしたシフト演算である場合であって、
設定手段が、シフト演算の対象となる浮動小数点数ｘを整数型データの変数として設定するステップと、
第１の演算手段が、前記整数型データの変数を、前記浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、前記浮動小数点数ｘにおける指数値を抽出するステップと、
第２の演算手段が、前記第１の演算手段による整数演算後の前記整数型データに、シフト演算のシフト量ｎを加算する整数演算を施すステップと、
第３の演算手段が、前記第２の演算手段による整数演算後の前記整数型データを、前記浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、前記浮動小数点数ｘにおける指数部に対応するビット部分を、前記シフト演算後の前記整数型データの値に置き換える整数演算を施すステップと、
変換手段が、前記第３の演算手段による整数演算後の整数型データを浮動小数点型データに型変換するステップと
を含む
ことを特徴とする請求項１に記載の浮動小数点演算の方法。
【請求項３】
前記演算式による演算が、
ｘ＝１．０とした２．０のべき乗演算である場合であって、
設定手段が、前記べき乗演算におけるべき指数ｎを整数型データの変数として設定するステップと、
整数演算手段が、前記整数型データの変数として設定されたべき指数ｎを、前記浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すステップと、
変換手段が、前記整数演算後の整数型データを浮動小数点型データに型変換するステップと
を含む
ことを特徴とする請求項１に記載の浮動小数点演算の方法。
【請求項４】
前記整数演算手段が、
前記整数型データの変数として設定されたべき指数ｎを、前記浮動小数点型データの仮数部のビット数分だけ上位ビット側にシフトさせる整数演算を施す
ことを特徴とする請求項３に記載の浮動小数点演算の方法。
【請求項５】
前記浮動小数点型データは、指数値に所定のバイアス値を加えた値が指数部に設定されるものであり、
前記整数演算手段が、
前記整数型データの変数として設定されたべき指数ｎに、前記バイアス値を加える整数演算を施した後、前記シフト演算を行う
ことを特徴とする請求項３に記載の浮動小数点演算の方法。
【請求項６】
下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける所定の演算をコンピュータに実行させるための浮動小数点演算プログラムであって、
コンピュータに、
以下の浮動小数点型データにおける演算を、整数演算手段による整数演算のみで行わせるためのものである
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
ことを特徴とする浮動小数点演算プログラム。
【請求項７】
前記演算式による演算は、
シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとしたシフト演算であり、
設定手段が、シフト演算の対象となる浮動小数点数ｘを整数型データの変数として設定するステップと、
第１の演算手段が、前記整数型データの変数を、前記浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、前記浮動小数点数ｘにおける指数値を抽出するステップと、
第２の演算手段が、前記第１の演算手段による整数演算後の前記整数型データに、シフト演算のシフト量ｎを加算する整数演算を施すステップと、
第３の演算手段が、前記第２の演算手段による整数演算後の前記整数型データを、前記浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、前記浮動小数点数ｘにおける指数部に対応するビット部分を、前記シフト演算後の前記整数型データの値に置き換える整数演算を施すステップと、
変換手段が、前記第３の演算手段による整数演算後の整数型データを浮動小数点型データに型変換するステップと
を含む各ステップをコンピュータに実行させるためのものである
ことを特徴とする請求項６に記載の浮動小数点演算プログラム。
【請求項８】
前記演算式による演算が、
ｘ＝１．０とした２．０のべき乗演算である場合であって、
設定手段が、２．０のべき乗演算におけるべき指数ｎを整数型データの変数ｅｘｐ１として設定するステップと、
整数演算手段が、前記整数型データの変数として設定されたべき指数ｎを、前記浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すステップと、
変換手段が、前記整数演算後の整数型データを浮動小数点型データに型変換するステップと
を含む各ステップをコンピュータに実行させるためのものである
ことを特徴とする請求項６に記載の浮動小数点演算プログラム。
【請求項９】
前記整数演算手段が、
前記整数型データの変数として設定されたべき指数ｎを、前記浮動小数点型データの仮数部のビット数分だけ上位ビット側にシフトさせる整数演算を施すステップを含む
ことを特徴とする請求項８に記載の浮動小数点演算プログラム。
【請求項１０】
前記浮動小数点型データは、指数値に所定のバイアス値を加えた値が指数部に設定されるものであり、
前記整数演算手段が、
前記整数型データの変数として設定されたべき指数ｎに、前記バイアス値を加える整数演算を施した後、前記シフト演算を行うステップを含む
ことを特徴とする請求項８に記載の浮動小数点演算プログラム。
【請求項１１】
下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける所定の演算を行う浮動小数点演算装置であって、
以下の浮動小数点型データにおける演算を、整数演算手段による整数演算のみで行うようになされている
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
ことを特徴とする浮動小数点演算装置。
【請求項１２】
前記演算式による演算が、
シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとしたシフト演算である場合であって、
シフト演算の対象となる浮動小数点数ｘを整数型データの変数として設定する設定手段と、
前記整数型データの変数を、前記浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、前記浮動小数点数ｘにおける指数値を抽出する第１の演算手段と、
前記第１の演算手段による整数演算後の前記整数型データに、シフト演算のシフト量ｎを加算する整数演算を施す第２の演算手段と、
前記第２の演算手段による整数演算後の前記整数型データを、前記浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、前記浮動小数点数ｘにおける指数部に対応するビット部分を、前記シフト演算後の前記整数型データの値に置き換える整数演算を施す第３の演算手段と、
前記第３の演算手段による整数演算後の整数型データを浮動小数点型データに型変換する変換手段と
を備えたことを特徴とする請求項１１に記載の浮動小数点演算装置。
【請求項１３】
前記演算式による演算が、
ｘ＝１．０とした２．０のべき乗演算である場合であって、
２．０のべき乗演算におけるべき指数ｎを整数型データの変数として設定する設定手段と、
前記整数型データの変数として設定されたべき指数ｎを、前記浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施す整数演算手段と、
前記整数演算後の整数型データを浮動小数点型データに型変換する変換手段と
を備えたことを特徴とする請求項１１に記載の浮動小数点演算装置。
【請求項１４】
前記整数演算手段は、
前記整数型データの変数として設定されたべき指数ｎを、前記浮動小数点型データの仮数部のビット数分だけ上位ビット側にシフトさせる整数演算を施すようになされている
ことを特徴とする請求項１３に記載の浮動小数点演算装置。
【請求項１５】
前記浮動小数点型データは、指数値に所定のバイアス値を加えた値が指数部に設定されるものであり、
前記整数演算手段は、
前記整数型データの変数として設定されたべき指数ｎに、前記バイアス値を加える整数演算を施した後、前記シフト演算を行うようになされている
ことを特徴とする請求項１３に記載の浮動小数点演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、浮動小数点型データにおける所定の演算を行うための浮動小数点演算の方法および浮動小数点演算プログラム、ならびに浮動小数点演算装置に関する。
【０００２】
【従来の技術】
コンピュータで扱う数の表現法としては、整数型や実数型などがある。整数型データでは、ビット列を固定小数点表現と解釈して、整数値を表す。実数型データ（浮動小数点型データ）では、ビット列を浮動小数点表現と解釈して、実数値を表す。浮動小数点型データの表現形式としては、例えばＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｆｏｒ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｉｎｇ）７５４規格によるものがある。
【０００３】
図５（Ａ），（Ｂ）はそれぞれ、ＩＥＥＥ７５４規格による単精度および倍精度の浮動小数点型データの表現形式を表している。この表現形式では、下位ビット側（右側）から順に、仮数部Ｆ、指数部Ｅ、および符号ビットＳからなるビット列で浮動小数点型データが構成される。数値表現形式で表すと、以下のとおりとなる。Ｂは、バイアス成分である。
（−１）Ｓ（２Ｅ−Ｂ）（１．Ｆ）
【０００４】
ここでは特に、単精度の浮動小数点型データ（図５（Ａ））について説明する。単精度の場合、３１ビット目は符号を表すビットで仮数部が正の場合は０、負の場合は１となる。３０〜２３ビット目の８ビットは指数部を表している。指数部のビット構成は「指数値＋バイアス」となる。ＩＥＥＥ７５４規格では単精度のバイアスとして１２７を使用している。そのため、例えば指数値が０のときは“０＋１２７”であり、指数部は１２７のビット構成（０ｘ７ｆ）となる（“０ｘ”は、“７ｆ”が１６進数であることを示す）。なお、指数部が０と２５５の場合は特別な意味があるが、ここでは説明を省略する。２２〜０ビット目の２３ビットは仮数部を表している。
【０００５】
図６は、浮動小数点演算と整数演算とを行うことが可能な装置の構成例を示している。この演算装置は、データを保持するメモリ１０１と、整数演算用の汎用レジスタ１０２および整数演算器１０３と、浮動小数点用レジスタ１０４および浮動小数点演算器１０５と、これら各部の制御を行う制御部１００とを備えている。
【０００６】
この演算装置において、浮動小数点演算を行う場合は、まずメモリ１０１から浮動小数点用レジスタ１０４へ必要なデータをロードする。次に、浮動小数点演算器１０５で演算を行い、その結果を浮動小数点用レジスタ１０４に書き込む。そして、浮動小数点用レジスタ１０４の値をメモリ１０１へ書き込む。整数演算を行う場合は、まずメモリ１０１から汎用レジスタ１０２へ必要なデータをロードする。次に、整数演算器１０３で演算を行い、その結果を汎用レジスタ１０２に書き込む。そして、汎用レジスタ１０２の値をメモリ１０１へ書き込む。
【０００７】
図７は、図６の演算装置を用いて実現される、単精度浮動小数点型データにおけるシフト演算の従来手法を示している。各ステップの動作は、制御部１００の制御により実行される。ここでいうシフト演算とは、シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとしたときに、「ｘ×２．０ｎ」の演算を行うことをいう。
【０００８】
まず、シフトしたい浮動小数点数ｘのデータを、メモリ１０１から浮動小数点用レジスタ１０４のｖａｒ１（単精度浮動小数点形式の変数）にロードすると共に、シフト量（正の整数）ｎをメモリ１０１から汎用レジスタ１０２のｅｘｐ１（符号つき整数形式の変数）にロードする（ステップＳ１０１）。次に、ループのカウンタｍ（符号つき整数形式の変数）を０で初期化する（ステップＳ１０２）。
【０００９】
そして、ステップＳ１０３からステップＳ１０６のループ演算（２．０のべき乗演算）を繰り返すことで実際のシフト演算を実行する。ループ演算としては、浮動小数点演算器１０５によって、変数ｖａｒ１（＝初期値・シフトしたい浮動小数点数ｘ）に“２．０”を乗算し、整数演算器１０３によって、カウンタｍを１つずつ増加させる演算（ステップＳ１０４，Ｓ１０５）を、カウンタｍが、変数ｅｘｐ１（＝シフト量ｎ）の値と同じになるまで繰り返す。すなわち、「ｍ＜ｅｘｐ１」の間はループ演算を繰り返す。「ｍ＜ｅｘｐ１」であるか否かの判断は制御部１００が行う。ループ演算が終了したら、シフト演算の結果である変数ｖａｒ１の最終的な値を浮動小数点用レジスタ１０４からメモリ１０１にストアする（ステップＳ１０７）。
【００１０】
なお、以上のシフト演算は、指数部のビット列を左方向にシフトさせる演算であるが、減少方向（右方向）へのシフト演算は、ステップＳ１０４の演算を除算演算（ｖａｒ１／２．０）にするか、あるいはステップＳ１０７で、「１／ｖａｒ１」とした値をメモリ１０１に書き込むことで可能である。
【００１１】
図８は、浮動小数点型データにおける２．０のべき乗演算を行うための演算装置を示している。図８の演算装置におけるハードウエア構成は図６と同様である。図９は、図８の演算装置を用いて実現される、単精度浮動小数点型データにおける２．０のべき乗演算の従来手法を示している。各ステップの動作は、制御部１００の制御により実行される。２．０のべき乗演算は、上述したシフト演算「ｘ×２．０ｎ」において、ｘ＝１．０とした演算と実質的に同様である。
【００１２】
まず、べき指数ｎ（正の整数）をメモリ１０１から汎用レジスタ１０２のｅｘｐ１（符号つき整数形式の変数）にロードする（ステップＳ２０１）。なお、ここではＩＥＥＥ７５４規格での単精度浮動小数点を演算対象としているため、ｅｘｐ１の値は、０〜１２７の範囲となる。次に、初期値として、単精度浮動小数点形式の変数ｖａｒ１を１．０で初期化すると共に、ループのカウンタｍ（符号つき整数形式の変数）を０で初期化する（ステップＳ２０２）。
【００１３】
そして、ステップＳ２０３からステップＳ２０６のループ演算を繰り返すことで実際の２．０のべき乗演算を実行する。ループ演算としては、浮動小数点演算器１０５によって、変数ｖａｒ１（＝初期値１．０）に“２．０”を乗算し、整数演算器１０３によって、カウンタｍを１つずつ増加させる演算（ステップＳ２０４，Ｓ２０５）を、カウンタｍが、変数ｅｘｐ１（＝べき指数ｎ）の値と同じになるまで繰り返す。すなわち、「ｍ＜ｅｘｐ１」の間はループ演算を繰り返す。「ｍ＜ｅｘｐ１」であるか否かの判断は制御部１００が行う。ループ演算が終了したら、べき乗演算の結果である変数ｖａｒ１の最終的な値を浮動小数点用レジスタ１０４からメモリ１０１にストアする（ステップＳ２０７）。
【００１４】
なお、以上のべき乗演算は、べき指数ｎが正である場合の演算であるが、べき指数ｎが負である場合のべき乗演算は、ステップＳ２０４の演算を除算演算（ｖａｒ１／２．０）にするか、あるいはステップＳ２０７で、「１／ｖａｒ１」とした値をメモリ１０１に書き込むことで可能である。
【００１５】
浮動小数点におけるシフト演算およびべき乗演算そのものを目的としたものではないが、浮動小数点演算に関する技術の従来例としては、例えば以下の文献記載のものがある。
【００１６】
【特許文献１】
特開平０７−２００２５９号公報
【００１７】
【発明が解決しようとする課題】
図７に示したシフト演算の従来手法では、ステップＳ１０４で乗算を行っているが、これは浮動小数点における乗算であるためサイクル数が整数演算に比べ多くなってしまうという問題がある。さらに、乗算をシフト量ｎの回数分繰り返すため、シフト量ｎに比例して演算サイクル数が増加（ｅｘｐ１倍）するという問題もある。なお、減少方向へのシフト演算の場合は、ステップＳ１０４の演算を除算演算にするか、あるいはステップＳ１０７で、「１／ｖａｒ１」とした値をメモリ１０１に書き込むことで可能であるが、この場合はさらに多くのサイクル数を必要とする。
【００１８】
図９に示したべき乗演算の従来手法においても同様に、ステップＳ２０４で乗算を行っているが、これは浮動小数点における乗算であるためサイクル数が整数演算に比べ多くなってしまうという問題がある。さらに、乗算をべき指数ｎの回数分繰り返すため、べき指数ｎに比例して演算サイクル数が増加（ｅｘｐ１倍）するという問題もある。なお、べき指数ｎが負である場合のべき乗演算は、ステップＳ２０４の演算を除算演算にするか、あるいはステップＳ２０７で、「１／ｖａｒ１」とした値をメモリ１０１に書き込むことで可能であるが、この場合はさらに多くのサイクル数を必要とする。
【００１９】
本発明はかかる問題点に鑑みてなされたもので、その目的は、従来に比べて演算に要するサイクル数を削減し、浮動小数点型データにおける所定の演算を、従来に比べて高速に行うことができるようにした浮動小数点演算の方法および浮動小数点演算プログラム、ならびに浮動小数点演算装置を提供することにある。
【００２０】
【課題を解決するための手段】
本発明による浮動小数点演算の方法は、下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける所定の演算をコンピュータで行う浮動小数点演算の方法であって、以下の浮動小数点型データにおける演算を、整数演算手段による整数演算のみで行うようにしたものである。
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
【００２１】
特に、上記演算式による演算が、シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとした、浮動小数点型データにおけるシフト演算である場合には、本発明による浮動小数点演算の方法は、以下のようなステップを含むものである。すなわち、設定手段が、シフト演算の対象となる浮動小数点数ｘを整数型データの変数として設定するステップと、第１の演算手段が、整数型データの変数を、浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、浮動小数点数ｘにおける指数値を抽出するステップと、第２の演算手段が、第１の演算手段による整数演算後の整数型データに、シフト演算のシフト量ｎを加算する整数演算を施すステップと、第３の演算手段が、第２の演算手段による整数演算後の整数型データを、浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、浮動小数点数ｘにおける指数部に対応するビット部分を、シフト演算後の整数型データの値に置き換える整数演算を施すステップと、変換手段が、第３の演算手段による整数演算後の整数型データを浮動小数点型データに型変換するステップとを含むものである。
【００２２】
また特に、上記演算式による演算が、ｘ＝１．０とした、浮動小数点型データにおける２．０のべき乗演算である場合には、本発明による浮動小数点演算の方法は、以下のようなステップを含むものである。すなわち、設定手段が、べき乗演算におけるべき指数ｎを整数型データの変数として設定するステップと、整数演算手段が、整数型データの変数として設定されたべき指数ｎを、浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すステップと、変換手段が、整数演算後の整数型データを浮動小数点型データに型変換するステップとを含むものである。
【００２３】
本発明による浮動小数点演算プログラムは、下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける所定の演算をコンピュータに実行させるための浮動小数点演算プログラムであって、コンピュータに、以下の浮動小数点型データにおける演算を、整数演算手段による整数演算のみで行わせるためのものである。
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
【００２４】
特に、上記演算式による演算が、シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとした、浮動小数点型データにおけるシフト演算である場合には、本発明による浮動小数点演算プログラムは、以下のようなステップをコンピュータに実行させるためのものである。すなわち、設定手段が、シフト演算の対象となる浮動小数点数ｘを整数型データの変数として設定するステップと、第１の演算手段が、整数型データの変数を、浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、浮動小数点数ｘにおける指数値を抽出するステップと、第２の演算手段が、第１の演算手段による整数演算後の整数型データに、シフト演算のシフト量ｎを加算する整数演算を施すステップと、第３の演算手段が、第２の演算手段による整数演算後の整数型データを、浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、浮動小数点数ｘにおける指数部に対応するビット部分を、シフト演算後の整数型データの値に置き換える整数演算を施すステップと、変換手段が、第３の演算手段による整数演算後の整数型データを浮動小数点型データに型変換するステップとを含む各ステップをコンピュータに実行させるためのものである。
【００２５】
また特に、上記演算式による演算が、ｘ＝１．０とした、浮動小数点型データにおける２．０のべき乗演算である場合には、本発明による浮動小数点演算プログラムは、以下のようなステップをコンピュータに実行させるためのものである。すなわち、設定手段が、２．０のべき乗演算におけるべき指数ｎを整数型データの変数として設定するステップと、整数演算手段が、整数型データの変数として設定されたべき指数ｎを、浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すステップと、変換手段が、整数演算後の整数型データを浮動小数点型データに型変換するステップとを含む各ステップをコンピュータに実行させるためのものである。
【００２６】
本発明による浮動小数点演算装置は、下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける所定の演算を行う浮動小数点演算装置であって、以下の浮動小数点型データにおける演算を、整数演算手段による整数演算のみで行うようになされているものである。
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
【００２７】
特に、上記演算式による演算が、シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとした、浮動小数点型データにおけるシフト演算である場合には、本発明による浮動小数点演算装置は、以下のような手段を備えるものである。すなわち、シフト演算の対象となる浮動小数点数ｘを整数型データの変数として設定する設定手段と、整数型データの変数を、浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、浮動小数点数ｘにおける指数値を抽出する第１の演算手段と、第１の演算手段による整数演算後の整数型データに、シフト演算のシフト量ｎを加算する整数演算を施す第２の演算手段と、第２の演算手段による整数演算後の整数型データを、浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、浮動小数点数ｘにおける指数部に対応するビット部分を、シフト演算後の整数型データの値に置き換える整数演算を施す第３の演算手段と、第３の演算手段による整数演算後の整数型データを浮動小数点型データに型変換する変換手段とを備えるものである。
【００２８】
また特に、上記演算式による演算が、ｘ＝１．０とした、浮動小数点型データにおける２．０のべき乗演算である場合には、本発明による浮動小数点演算装置は、以下のような手段を備えるものである。すなわち、２．０のべき乗演算におけるべき指数ｎを整数型データの変数として設定する設定手段と、整数型データの変数として設定されたべき指数ｎを、浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施す整数演算手段と、整数演算後の整数型データを浮動小数点型データに型変換する変換手段とを備えるものである。
【００２９】
本発明による浮動小数点演算の方法および浮動小数点演算プログラム、ならびに浮動小数点演算装置では、浮動小数点演算器を用いることなく、浮動小数点演算器よりも高速演算が可能な整数演算手段を用いることによって、浮動小数点型データにおける所定の演算が高速に行われる。
【００３０】
特に、上記演算式による演算が、シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとした、浮動小数点型データにおけるシフト演算である場合には、まず、シフト演算の対象となる浮動小数点数ｘが整数型データの変数として設定される。次に、その整数型データの変数に対して、浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算が施され、浮動小数点数ｘにおける指数値が抽出される。さらに、その整数演算後の整数型データに、シフト演算のシフト量ｎを加算する整数演算が施された後、浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算が施される。さらに、そのシフト演算後の整数型データの値を、浮動小数点数ｘにおける指数部に対応するビット部分として置き換える整数演算が施され、その整数演算後の整数型データが浮動小数点型データに型変換されることで、結果的に浮動小数点数ｘにおけるシフト演算が行われる。従来の浮動小数点演算器を用いた手法では、シフト量ｎに比例して演算サイクル数が増加するが、本発明では、シフト量ｎにかかわらず演算サイクル数は一定であり、演算サイクルが従来よりも削減される。
【００３１】
また特に、上記演算式による演算が、ｘ＝１．０とした、浮動小数点型データにおける２．０のべき乗演算である場合には、まず、べき乗演算におけるべき指数ｎが整数型データの変数として設定される。次に、その整数型データの変数に対して、浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算が施される。その整数演算後の整数型データが浮動小数点型データに型変換されることで、結果的に２．０のべき乗演算が行われる。従来の浮動小数点演算器を用いた手法では、べき指数ｎに比例して演算サイクル数が増加するが、本発明では、べき指数ｎにかかわらず演算サイクル数は一定であり、演算サイクルが従来よりも削減される。
【００３２】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００３３】
［第１の実施の形態］
図１は、本発明の第１の実施の形態に係る浮動小数点演算の方法を実現するための具体的な装置構成例を示している。この浮動小数点演算装置は、コンピュータにより構成されるものであり、データを保持するメモリ１１および汎用レジスタ１２と、整数演算を行う整数演算器１３と、これら各部の制御を行う制御部１０とを備えている。制御部１０は、本実施の形態に係る浮動小数点演算プログラムに従って、各部の制御を行うものである。
【００３４】
この浮動小数点演算装置は、下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける以下の演算を、浮動小数点演算器を用いることなく、整数演算手段による整数演算のみで行うものである。
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
【００３５】
本実施の形態では、上記演算式による演算が、シフト演算の対象となる浮動小数点数をｘ、シフト量をｎとした、浮動小数点型データにおけるシフト演算であるものとして説明する。
【００３６】
この浮動小数点演算装置は、シフト演算の対象となる浮動小数点数ｘを整数型データの変数ｖａｒ２として設定する設定手段としての機能を有している。この浮動小数点演算装置はまた、整数型データの変数ｖａｒ２を、浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、浮動小数点数ｘにおける指数値を抽出する第１の演算手段としての機能を有している。また、第１の演算手段による整数演算後の整数型データｅｘｐ２に、シフト演算のシフト量ｎを加算する整数演算を施す第２の演算手段としての機能を有している。また、第２の演算手段による整数演算後の整数型データｅｘｐ３を、浮動小数点数ｘにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、浮動小数点数ｘにおける指数部に対応するビット部分を、シフト演算後の整数型データｅｘｐ３の値に置き換える整数演算を施す第３の演算手段としての機能を有している。また、第３の演算手段による整数演算後の整数型データｖａｒ３を浮動小数点型データに型変換する変換手段としての機能を有している。これらの各機能により実現される演算の具体例は後に詳述する。
【００３７】
ここで、本実施の形態において、主に制御部１０が、本発明における「設定手段」および「変換手段」の一具体例に対応する。また、整数演算器１３が、本発明における「第１の演算手段」、「第２の演算手段」および「第３の演算手段」の一具体例に対応する。
【００３８】
次に、以上のように構成された浮動小数点演算装置の動作を、本実施の形態に係る浮動小数点演算の方法と共に説明する。
【００３９】
ここでは、ＩＥＥＥ７５４規格による単精度の浮動小数点型データ（図５（Ａ））におけるシフト演算について説明する。なお、この規格において指数部が０と２５５の場合は特別な意味を持つので、本実施の形態ではシフト演算の対象とはしない。
【００４０】
本実施の形態では、演算装置として浮動小数点演算器を使用しないで整数演算器１３のみ使用し、浮動小数点のシフト演算を実現する。本実施の形態では、浮動小数点数を値として注目するのではなく、そのビット配列に注目し、ビット配列を整数演算器１３で操作することでシフト演算と同等の演算を実現する。このため、本実施の形態では、演算対象となる浮動小数点型データを整数型データに一時的に型変換して整数演算を行う。ここで、「型変換する」というのは、変数の取り扱うオペランドを変換するということである。従って、浮動小数点型データを整数型データに型変換するということは、ビット列自体は変えずに、そのビット列に対する解釈の仕方を浮動小数点型から整数型に変えるという意味である。特に、符号なし整数型データに変換した場合には、形式上、浮動小数点型データにおける仮数部、指数部、および符号ビットというビット列の区分はなくなる。
【００４１】
図２は、この浮動小数点演算装置の動作およびそれによって実現される浮動小数点演算の方法を示している。各ステップの動作は、制御部１０の制御により実行される。まず、制御部１０の設定手段としての機能により、シフト演算の対象となる浮動小数点数ｘを整数型データの変数ｖａｒ２として設定する（ステップＳ１１）。具体的には、シフトしたい浮動小数点数ｘのデータを、メモリ１１からそのままのビット配列で汎用レジスタ１２のｖａｒ２（符号なし整数形式の変数）にロードする。また、シフト量ｎ（正負問わない）を、メモリ１１から汎用レジスタ１２のｅｘｐ１（符号つき整数形式の変数）にロードする。従来の手法では、減少方向へのシフト演算と増加方向へのシフト演算とを別々のアルゴリズムで行う必要があったが、本実施の形態による演算手法では、シフト量ｎとしてｅｘｐ１に負数を設定するだけで減少方向へのシフト演算を行うことが可能である。すなわち、この演算手法では、同一のアルゴリズムで両方向のシフト演算を行うことが可能である。
【００４２】
次に、整数演算器１３の第１の演算手段としての機能により、変数ｖａｒ２を、浮動小数点数ｘの仮数部のビット数分だけ下位ビット側にシフトさせる整数演算を施し、浮動小数点数ｘにおける指数値を抽出する（ステップＳ１２）。具体的には、以下の演算を行う。“＆”は、ＡＮＤ演算記号を表す。
（ｖａｒ２＞＞２３）＆０ｘ００００００ｆｆ
【００４３】
単精度浮動小数点型では、仮数部のビット数は２３ビットである。「ｖａｒ２＞＞２３」は、ｖａｒ２のビット配列を仮数部の２３ビット分だけ下位ビット側（右側）にシフトさせる演算を意味する。これにより、ｖａｒ２において、浮動小数点数ｘの指数部のビットに対応する部分が、下位側の８ビットの部分に配列される。一方、０ｘ００００００ｆｆの“０ｘ”は、それに続く値“００００００ｆｆ”が１６進数であることを示している。“００００００ｆｆ”は、下位側８ビット以外のビット値が０であることを示しているから、“ｖａｒ２＞＞２３”とＡＮＤ演算をとることにより、下位側８ビットに浮動小数点数ｘの指数部のビット値が配列され、それ以外のビット部分は０となる。これにより、浮動小数点数ｘにおける指数値が抽出される。このステップＳ１２による演算後の値は、汎用レジスタ１２のｅｘｐ２（符号つき整数形式の変数）として設定される。
【００４４】
次に、整数演算器１３の第２の演算手段としての機能により、ステップＳ１２による演算後の整数型データ（ｅｘｐ２）に、シフト演算のシフト量ｎを加算する整数演算を施す（ステップＳ１３）。具体的には、ステップＳ１１においてシフト量ｎがｅｘｐ１として設定されているので、以下の加算演算を行う。加算後の値は、汎用レジスタ１２のｅｘｐ３（符号なし整数形式の変数）として設定される。
ｅｘｐ２＋ｅｘｐ１
【００４５】
次に、制御部１０は、ｅｘｐ３が以下の数値範囲内にあるか否かの判断を行う（ステップＳ１４）。
０＜ｅｘｐ３＜２５５
単精度浮動小数点において指数部が０と２５５のときは特別な意味を持つつので、ｅｘｐ３の値が０と２５５のときは、エラー処理とする（ステップＳ１４：Ｎ）。
【００４６】
ｅｘｐ３が上記数値範囲にある場合（ステップＳ１４：Ｙ）には、整数演算器１３の第３の演算手段としての機能により、ｅｘｐ３の値を浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施すと共に、浮動小数点数ｘにおける指数部に対応するビット部分を、シフト演算後のｅｘｐ３の値に置き換える整数演算を施す（ステップＳ１５）。具体的には、以下の演算を行う。“＆”は、ＡＮＤ演算記号、“｜”は、ＯＲ演算記号を表す。
（ｖａｒ２＆０ｘ８０７ｆｆｆｆｆ）｜（ｅｘｐ３＜＜２３）
【００４７】
１６進数値“８０７ｆｆｆｆｆ”は、浮動小数点型データに対応付けると、指数部に対応する部分以外のビット値が１であることを示しているから、ｖａｒ２（浮動小数点数ｘ）とのＡＮＤ演算を行うと、ｖａｒ２における指数部に対応するビット部分が０になり、それ以外のビット値はそのままとなる。一方、「ｅｘｐ３＜＜２３」は、ｅｘｐ３のビット配列を、浮動小数点型データにおける仮数部の２３ビット分だけ上位ビット側（左側）にシフトさせる演算を意味する。これにより、ｅｘｐ３の下位側８ビットの部分が、浮動小数点型データにおける指数部に対応する部分に配列される。このシフト演算後のｅｘｐ３と“ｖａｒ２＆０ｘ８０７ｆｆｆｆｆ”の値とをビットごとにＯＲ演算し、その演算値を、汎用レジスタ１２のｖａｒ３（符号なし整数形式の変数）に設定する。
【００４８】
ステップＳ１５の演算を実行することで、浮動小数点数ｘのシフト演算に相当するビット配列が汎用レジスタ１２のｖａｒ３に得られる。この最終的な演算結果であるｖａｒ３のビット配列を、制御部１０の変換手段としての機能により、そのままメモリ１１にストアすることで、浮動小数点のシフト演算が完了する（ステップＳ１６）。ｖａｒ３の値を書き込んだメモリ１１の領域を単精度浮動小数点型データとみなしてアクセスすれば、浮動小数点数ｘのシフト演算の結果として値を利用できる。
【００４９】
以上説明したように、本実施の形態によれば、浮動小数点数を値として注目するのではなく、そのビット配列に注目して、整数演算によりシフト演算と同等の演算を行うようにしたので、浮動小数点演算器を用いることなく、浮動小数点演算器よりも高速演算が可能な整数演算器１３を用いることができ、高速に、浮動小数点型データにおけるシフト演算を行うことができる。従来の浮動小数点演算器を用いた手法では、シフト量ｎに比例して演算サイクル数が増加するが、本実施の形態では、シフト量ｎにかかわらず演算サイクル数は一定であり、演算サイクルの削減が可能となる。これにより、浮動小数点型データにおけるシフト演算を、従来の手法に比べて高速に行うことができる。また、従来と比べてハードウエア的にあらたな構成要素を必要とせず、既存のハードウエアを用いて容易に実現可能である。
【００５０】
［第２の実施の形態］
次に、本発明の第２の実施の形態について説明する。
【００５１】
図３は、本発明の第２の実施の形態に係る浮動小数点演算の方法を実現するための具体的な装置構成例を示している。この浮動小数点演算装置は、コンピュータにより構成されるものであり、データを保持するメモリ２１および汎用レジスタ２２と、整数演算を行う整数演算器２３と、これら各部の制御を行う制御部２０とを備えている。制御部２０は、本実施の形態に係る浮動小数点演算プログラムに従って、各部の制御を行うものである。
【００５２】
この浮動小数点演算装置は、下位ビット側から順に仮数部および指数部を含む浮動小数点型データにおける以下の演算を、浮動小数点演算器を用いることなく、整数演算手段による整数演算のみで行うものであって、特に、ｘ＝１．０とした、実質的に２．０のべき乗演算を行うためのものである。
ｘ×２．０ｎ
（ただし、ｘは浮動小数点数、ｎは２．０のべき指数、×は乗算記号）
【００５３】
この浮動小数点演算装置は、２．０のべき乗演算におけるべき指数ｎを整数型データの変数として設定する設定手段としての機能を有している。この浮動小数点演算装置はまた、整数型データの変数として設定されたべき指数ｎを、浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施す整数演算手段としての機能を有している。また、整数演算後の整数型データｖａｒ２を浮動小数点型データに型変換する変換手段としての機能を有している。
【００５４】
整数演算手段としての機能には、整数型データの変数として設定されたべき指数ｎを、浮動小数点型データの仮数部のビット数分だけ上位ビット側にシフトさせる整数演算を施す機能が含まれる。
【００５５】
整数演算手段としての機能にはまた、浮動小数点型データが、指数値に所定のバイアス値を加えた値が指数部に設定されるものである場合において、整数型データの変数ｅｘｐ１として設定されたべき指数ｎに、そのバイアス値を加える整数演算を施した後、シフト演算を行う機能が含まれる。
【００５６】
ここで、本実施の形態において、主に制御部２０が、本発明における「設定手段」および「変換手段」の一具体例に対応する。また、整数演算器２３が、本発明における「整数演算手段」の一具体例に対応する。
【００５７】
次に、以上のように構成された浮動小数点演算装置の動作を、本実施の形態に係る浮動小数点演算の方法と共に説明する。
【００５８】
ここでは、ＩＥＥＥ７５４規格による単精度の浮動小数点型データ（図５（Ａ））における２．０のべき乗演算について説明する。なお、この規格において指数部が０と２５５の場合は特別な意味を持つので、本実施の形態ではべき乗演算の対象とはしない。
【００５９】
本実施の形態では、演算装置として浮動小数点演算器を使用しないで整数演算器２３のみ使用し、浮動小数点における２．０のべき乗演算を実現する。本実施の形態では、浮動小数点数を値として注目するのではなく、そのビット配列に注目し、ビット配列を整数演算器２３で操作することでべき乗演算と同等の演算を実現する。最終的には、整数演算後の整数型データを浮動小数点型データに型変換することで、浮動小数点における２．０のべき乗の演算結果が得られる。ここで、「型変換する」というのは、変数の取り扱うオペランドを変換するということである。従って、例えば浮動小数点型データを整数型データに型変換するということは、ビット列自体は変えずに、そのビット列に対する解釈の仕方を浮動小数点型から整数型に変えるという意味である。
【００６０】
図４は、この浮動小数点演算装置の動作およびそれによって実現される浮動小数点演算の方法を示している。各ステップの動作は、制御部２０の制御により実行される。まず、制御部２０の設定手段としての機能により、２．０のべき乗演算におけるべき指数ｎを、メモリ２１から汎用レジスタ２２のｅｘｐ１（符号つき整数形式の変数）にロードする（ステップＳ２１）。ただし、単精度浮動小数点の指数部が０と２５５の場合は演算の対象としないので、ｅｘｐ１の範囲は“−１２６”以上、“１２７”以下とする（単精度浮動小数点の指数部のバイアスが１２７であるためこの範囲となる）。従来の手法では、べき指数ｎが負の場合と正の場合とで、べき乗演算を別々のアルゴリズムで行う必要があったが、本実施の形態による演算手法では、べき指数ｎとしてｅｘｐ１に負数を設定するだけでべき指数ｎが負の場合のべき乗演算を行うことが可能である。すなわち、この演算手法では、同一のアルゴリズムで正負両方のべき乗演算を行うことが可能である。
【００６１】
次に、整数演算器２３の整数演算手段としての機能により、べき指数ｎが設定された整数型データの変数ｅｘｐ１に、バイアス値である１２７を加算する整数演算を施し、その結果を、汎用レジスタ１２のｅｘｐ２（符号つき整数形式の変数）として設定する（ステップＳ２２）。
【００６２】
次に、整数演算器２３の整数演算手段としての機能により、変数ｅｘｐ２を、浮動小数点型データにおける指数部に対応するビット位置にまでシフトさせる整数演算を施し、その結果を、汎用レジスタ１２のｖａｒ２（符号なし整数形式の変数）として設定する（ステップＳ２３）。単精度浮動小数点型では、仮数部のビット数は２３ビットである。従って、ｅｘｐ２のビット配列を仮数部の２３ビット分だけ上位ビット側（左側）にシフトさせる演算を施すことで、指数部に対応するビット位置にまでシフトさせることができる。
【００６３】
ステップＳ２３の演算を実行することで、単精度浮動小数点における２．０のべき乗演算に相当するビット配列が汎用レジスタ２２の変数ｖａｒ２に得られる。この最終的な演算結果であるｖａｒ２のビット配列を、制御部２０の変換手段としての機能により、そのままメモリ２１にストアすることで、浮動小数点のべき乗演算が完了する（ステップＳ２４）。ｖａｒ２の値を書き込んだメモリ２１の領域を単精度浮動小数点型データとみなしてアクセスすれば、浮動小数点のべき乗演算の結果として値を利用できる。
【００６４】
以上説明したように、本実施の形態によれば、浮動小数点数を値として注目するのではなく、そのビット配列に注目して、整数演算により浮動小数点における２．０のべき乗演算と同等の演算を行うようにしたので、浮動小数点演算器を用いることなく、浮動小数点演算器よりも高速演算が可能な整数演算器２３を用いることができ、高速にべき乗演算を行うことができる。従来の浮動小数点演算器を用いた手法では、べき指数ｎに比例して演算サイクル数が増加するが、本実施の形態では、べき指数ｎにかかわらず演算サイクル数は一定であり、演算サイクルの削減が可能となる。これにより、浮動小数点型データにおけるべき乗を、従来の手法に比べて高速に行うことができる。また、従来と比べてハードウエア的にあらたな構成要素を必要とせず、既存のハードウエアを用いて容易に実現可能である。
【００６５】
なお、本発明は、以上の各実施の形態に限定されず、さらに種々の変形実施が可能である。例えば、以上の各実施の形態では、単精度の浮動小数点を対象に説明したが、ビット数の対応を変えることことで倍精度の浮動小数点にも適用可能である。また、浮動小数点の規格はＩＥＥＥ７５４規格に限定されず、下位ビット側から順に仮数部および指数部を含む浮動小数点型データであれば、本発明を適用可能である。
【００６６】
【発明の効果】
以上説明したように、本発明の浮動小数点演算の方法および浮動小数点演算プログラム、ならびに浮動小数点演算装置によれば、浮動小数点演算器を用いることなく、浮動小数点演算器よりも高速演算が可能な整数演算手段を用いることによって浮動小数点型データにおける所定の演算を行うようにしたので、浮動小数点型データにおける所定の演算を、従来の手法に比べて高速に行うことができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る浮動小数点演算装置の構成例を示すブロック図である。
【図２】本発明の第１の実施の形態に係る浮動小数点演算装置による浮動小数点演算の方法を示す流れ図である。
【図３】本発明の第２の実施の形態に係る浮動小数点演算装置の構成例を示すブロック図である。
【図４】本発明の第２の実施の形態に係る浮動小数点演算装置による浮動小数点演算の方法を示す流れ図である。
【図５】浮動小数点の表現方法の一例を示す説明図である。
【図６】浮動小数点型データにおけるシフト演算を行うための従来の回路構成を示すブロック図である。
【図７】浮動小数点型データにおけるシフト演算の従来手法を示す流れ図である。
【図８】浮動小数点型データにおけるべき乗演算を行うための従来の回路構成を示すブロック図である。
【図９】浮動小数点型データにおけるべき乗演算の従来手法を示す流れ図である。
【符号の説明】
１０，２０…制御部、１１，２１…メモリ、１２，２２…汎用レジスタ、１３，２３…整数演算器。
【図１】
2005031848.tif 000003
【図２】
2005031848.tif 000004
【図３】
2005031848.tif 000005
【図４】
2005031848.tif 000006
【図５】
2005031848.tif 000007
【図６】
2005031848.tif 000008
【図７】
2005031848.tif 000009
【図８】
2005031848.tif 000010
【図９】
2005031848.tif 000011