(57)【要約】【課題】固定小数点のプロセッサを用いて、浮動小数点数値を扱いやすくするような浮動小数点数値の格納方法等を提供する。【解決手段】実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、Ｎビット（Ｎ≧（Ｕ＋Ｌ））のビットフィールドの上位側のＵビットに仮数部を固定小数点数値で格納し、下位側のＬビットに指数部を整数で格納する。このようなフォーマットの２つの実数を乗算する場合には、両実数を固定小数点数値として乗算し、得られた結果の上位の有効ビットだけを仮数部とし、一方、両実数を整数として加算し、得られた結果の下位の有効ビットだけを指数部とすることで、乗算結果が浮動小数点フォーマットで得られる。【選択図】　　　　図１
2004078886.tif 000002
【特許請求の範囲】
【請求項１】
実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、前記ａ、ｎをＮビットのビットフィールドに格納する浮動小数点格納方法であって、
Ｕ及びＬが、Ｎ≧（Ｕ＋Ｌ）を満たす整数である場合に、
前記ビットフィールドの上位側のＵビットに仮数部を固定小数点数値で格納し、前記ビットフィールドの下位側のＬビットに指数部を整数で格納する
こと特徴とする浮動小数点格納方法。
【請求項２】
前記Ｎ及びＬは８の倍数である
ことを特徴とする請求項１記載の浮動小数点格納方法。
【請求項３】
請求項１記載の浮動少数点格納方法で仮数部と指数部が格納された実数ｘが記録されたコンピュータ読み取り可能な記録媒体。
【請求項４】
少なくとも１つが浮動小数点数値である２つの数値を乗算する浮動小数点演算装置であって、
前記２つの数値それぞれを格納するＮビットの第１及び第２のレジスタと、
前記第１及び第２のレジスタに格納されたＮビットのデータそれぞれを固定小数点数値として乗算する乗算器と
を備えることを特徴とする浮動小数点演算装置。
【請求項５】
前記２つの数値は、浮動小数点数値であり、
前記浮動小数点演算装置は、さらに、前記第１及び第２のレジスタに格納されたＮビットのデータそれぞれを整数として加算する加算器を備える
ことを特徴とする請求項４記載の浮動小数点演算装置。
【請求項６】
前記浮動小数点演算装置は、さらに、前記乗算器で得られた乗算結果の上位ビットと前記加算器で得られた加算結果の下位ビットとを結合するビット結合器を備える
ことを特徴とする請求項５記載の浮動小数点演算装置。
【請求項７】
前記浮動小数点数値は、Ｕビットの仮数部とＬビットの指数部からなり、
前記ビット結合器は、前記乗算器で得られた乗算結果の上位Ｕビットと前記加算器で得られた加算結果の下位Ｌビットとを結合する
ことを特徴とする請求項６記載の浮動小数点演算装置。
【請求項８】
前記浮動小数点演算装置は、さらに、前記乗算器で得られた乗算結果の上位ビットを取り出し、取り出したビットを前記加算器で得られた加算結果の下位ビットに応じてビットシフトするビットシフタを備える
ことを特徴とする請求項５記載の浮動小数点演算装置。
【請求項９】
前記浮動小数点数値は、Ｕビットの仮数部とＬビットの指数部からなり、
前記ビットシフタは、前記乗算器で得られた乗算結果の上位Ｕビットを取り出し、取り出したビットを前記加算器で得られた加算結果の下位Ｌビットに応じてビットシフトする
ことを特徴とする請求項８記載の浮動小数点演算装置。
【請求項１０】
前記２つの数値は、それぞれ、固定小数点数値と浮動小数点数値であり、前記第１のレジスタに固定小数点数値が格納され、前記第２のレジスタに浮動小数点数値が格納され、
前記浮動小数点演算装置は、さらに、前記乗算器で得られた乗算結果の上位ビットと前記第２のレジスタに格納された浮動小数点数値の指数部とを結合するビット結合器を備える
ことを特徴とする請求項４記載の浮動小数点演算装置。
【請求項１１】
前記浮動小数点数値は、Ｕビットの仮数部とＬビットの指数部からなり、
前記ビット結合器は、前記乗算器で得られた乗算結果の上位Ｕビットと前記第２のレジスタの下位Ｌビットとを結合する
ことを特徴とする請求項１０記載の浮動小数点演算装置。
【請求項１２】
前記２つの数値は、それぞれ、固定小数点数値と浮動小数点数値であり、前記第１のレジスタに固定小数点数値が格納され、前記第２のレジスタに浮動小数点数値が格納され、
前記浮動小数点演算装置は、さらに、前記乗算器で得られた乗算結果の上位ビットを取り出し、取り出したビットを前記第２のレジスタに格納されたデータの下位ビットに応じてビットシフトするビットシフタを備える
ことを特徴とする請求項４記載の浮動小数点演算装置。
【請求項１３】
前記浮動小数点数値は、Ｕビットの仮数部とＬビットの指数部からなり、
前記ビットシフタは、前記乗算器で得られた乗算結果の上位Ｕビットを取り出し、取り出したビットを前記第２のレジスタに格納されたデータの下位Ｌビットに応じてビットシフトする
ことを特徴とする請求項１２記載の浮動小数点演算装置。
【請求項１４】
前記Ｎ及びＬは８の倍数である
ことを特徴とする請求項４〜１３のいずれか１項に記載の浮動小数点演算装置。
【請求項１５】
実数ｘをａ＊　（２＾ｎ）とあらわした時のａを仮数部、ｎを指数部としたときに、２つの実数を乗算して得られる値を浮動小数点数値で出力する浮動小数点演算装置であって、
上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような浮動小数点数値を格納する第１及び第２のレジスタと、
前記第１のレジスタの値と前記第２のレジスタの値とを乗算する乗算器と、
前記第１のレジスタの値と前記第２のレジスタの値とを加算する加算器と、
前記乗算器の出力の上位側Ｕビットと、前記加算器の出力の下位側Ｌビットとを結合するビット結合器と
を備えることを特徴とする浮動小数点演算装置。
【請求項１６】
実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、２つの実数を乗算して得られる値を固定小数点数値で出力する浮動小数点演算装置であって、
上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような浮動小数点数値を格納する第１及び第２のレジスタと、
前記第１のレジスタの値と前記第２のレジスタの値とを乗算する乗算器と、
前記第１のレジスタの値と前記第２のレジスタの値とを加算する加算器と、
前記乗算器の出力の上位側ビットの値を、前記加算器の出力の下位側Ｌビットの値に応じてビットシフトするビットシフタと
を備えることを特徴とする浮動小数点演算装置。
【請求項１７】
実数ｘをａ＊　（２＾ｎ）とあらわした時のａを仮数部、ｎを指数部としたときに、実数に固定小数点数値を乗算して得られる値を浮動小数点数値で出力する浮動小数点演算装置であって、
固定小数点数値を格納する第１のレジスタと、
上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような浮動小数点数値を格納する第２のレジスタと、
前記第１のレジスタの値と前記第２のレジスタの値とを乗算する乗算器と、
前記乗算器の出力の上位側Ｕビットと、前記第２のレジスタに格納されたデータの下位側Ｌビットとを結合するビット結合器と
を備えることを特徴とする浮動小数点演算装置。
【請求項１８】
実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、実数に固定小数点数値を乗算して得られる値を固定小数点数値で出力する浮動小数点演算装置であって、
固定小数点数値を格納する第１のレジスタと、
上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような浮動小数点数値を格納する第２のレジスタと、
前記第１のレジスタの値と前記第２のレジスタの値とを乗算する乗算器と、
前記乗算器の出力の上位側Ｕビットの値を、前記第２のレジスタに格納されたデータの下位側Ｌビットの値に応じてビットシフトするビットシフタと
を備えることを特徴とする浮動小数点演算装置。
【請求項１９】
実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、実数を整数に変換する浮動小数点演算装置であって、
上位側のＵビットが仮数部を固定小数点数で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような浮動小数点数値を格納するレジスタと、
前記レジスタに格納された値を前記レジスタの下位側のＬビットが示す値に応じてビットシフトするビットシフタと
を備えることを特徴とする浮動小数点数演算装置。
【請求項２０】
前記浮動小数点演算装置は、さらに、
前記レジスタのビット数をＮ、前記仮数部格納フィールドにおける小数点位置より上位のビット数をＳ、前記レジスタの下位側のＬビットが示す値をｘとしたときに、（Ｎ−Ｓ−ｘ）の計算を行う減算器を備え、
前記ビットシフタは、前記減算器の出力値が示すビット数だけ、前記レジスタに格納された値をビットシフトする
ことを特徴とする請求項１９記載の浮動小数点数演算装置。
【請求項２１】
前記減算器は、さらに、予め決定されている数をＸとしたときに、（Ｎ−Ｓ−ｘ−Ｘ）の計算を行い、
前記ビットシフタは、前記減算器の出力値が示すビット数だけ、前記レジスタに格納された値をビットシフトする
ことを特徴とする請求項２０に記載の浮動小数点数演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、固定小数点のプロセッサを用いて、浮動小数点数値を扱いやすくするような浮動小数点数値の格納方法と、前記浮動小数点数値の演算装置に関するものである。
【０００２】
【従来の技術】
従来の浮動小数点数値（浮動小数点フォーマットの数値）の格納フォーマットの代表的な例として、ＩＥＥＥ７５４準拠の３２ビット浮動小数点フォーマットがある。Ｃ言語におけるｆｌｏａｔ型で宣言される変数は、このフォーマットに準拠している（たとえば、非特許文献１参照）。
【０００３】
図１２は、ＩＥＥＥ７５４準拠の３２ビット浮動小数点フォーマットのビットフィールドを表す図である。本図において、最上位の１ビットは、符号ビット格納フィールドであり、０なら正の数、１なら負の数を示す。
【０００４】
符号ビットに続く８ビットは、指数部格納フィールド７１と呼ばれる領域である。指数部に続く２３ビットは、仮数部格納フィールド７２と呼ばれる領域である。ここで、指数部を８ビットの整数とした場合の値をｅ、仮数部２３ビットを該２３ビットの最上位ビットの上に小数点があるような固定小数点数値（固定小数点フォーマットの数値）とした場合の値をｋ、とすると、この浮動小数点フォーマットで表される実数値ｘは、
ｘ＝（２＾（ｅ−１２７））＊（１・ｋ）
となる。
【０００５】
ここで、（１・ｋ）の表記は、２３ビットデータｋの最上位ビットに小数点があり、小数点の上の１ビットは、常に１である事を示している。例えば、２３ビットデータｋが
ｋ＝１００００００００００００００００００００００　である場合、
（１・ｋ）＝　Ｂ’１．１００００００００００００００００００００００　＝　１　＋　０．５　＝　１．５
を表している。もう１つの例を示すと、
ｋ＝１１１００００００００００００００００００００　である場合、
（１・ｋ）＝　Ｂ’１．１１１００００００００００００００００００００　＝　１　＋　０．５　＋　０．２５　＋　０．１２５＝　１．８７５
を表していることになる。つまり、仮数部は、１以上で２未満の値を表現するフィールドである。
【０００６】
以上のことから、ＩＥＥＥ７５４準拠の３２ビット浮動小数点のビットパターンが、例えば、
０　１０００００００　１１１００００００００００００００００００００
の場合、このビットパターンが示す実数値ｘは、
ｘ＝（２＾（１２８−１２７））＊１．８７５＝３．７５
となる。また、
０　０１１１１１１０　１００００００００００００００００００００００
の場合、このビットパターンが示す実数値ｘは、
ｘ＝（２＾（１２６−１２７））＊１．５＝０．７５
となる。
【０００７】
このようにして、ＩＥＥＥ７５４準拠の３２ビット浮動小数点フォーマットでは、実数ｘを表現するのに、ｘ＝ａ＊２＾ｎとしたときの仮数部ａ及び指数部ｎを上記のように変換して格納している。これによって、−２＾１２９〜２＾１２９という広範囲にわたる実数表現を可能にしている。
【０００８】
一方、そのような煩雑な変換を必要としない数値フォーマットとして、固定小数点数値がある。これは、図１３に示すように、上記のような指数部格納フィールドを持たない数値フォーマットであり、通常最上位ビットが符号情報で、以下の所定のビット位置に小数点が固定化されている数である。たとえば、図１３（ａ）に示すように、小数点の位置が、符号ビットの直下の位置にある場合、数値の取りうる範囲は、−１〜＋１と限定される。たとえば、
０　１００００００００００００００００００００００００００００００
の場合、最上位ビットが０であるので、正の数であり、小数点以下第１位が１であるので、０．５を表している。また、たとえば、
０　１１０００００００００００００００００００００００００００００
の場合、最上位ビットが０であるので、正の数であり、小数点以下第１位及び第２位が１であるので、０．５＋０．２５、即ち、０．７５を表している。正負の数値表現は通常２の補数で行われることが多く、その場合、たとえば、
１　０００００００００００００００００００００００００００００００
は、−１を表す。
１　１１０００００００００００００００００００００００００００００
は、−０．２５を表す
【０００９】
また、−１〜＋１という制限では扱いにくいような数を処理する場合は、図１３（ｂ）に示すように、たとえば、小数点の位置を、最上位ビットの２ビット下の位置に固定することもある。その場合、数値の取りうる範囲は、−２〜＋２となる。
【００１０】
たとえば、
０１　０１００００００００００００００００００００００００００００
の場合、最上位ビットが０であるので、正の数であり、小数点の上位に１があり、小数点以下第２位が１であるので、１．２５を表している。
【００１１】
以上のように、従来では、浮動小数点数値については、ＩＥＥＥ７５４に代表されるように、上位桁から、符号ビット、指数部、仮数部の順にビットが格納されるフォーマットで表現され、一方、固定小数点数値については、上位桁から、符号ビット、数値の順にビットが格納されるフォーマットで表現される。
【００１２】
【非特許文献１】
ＩＥＥＥ　７５４−１９８５　（Ｒ１９９０）　「Ｂｉｎａｒｙ　Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ　Ａｒｉｔｈｍｅｔｉｃ」　Ｉｎｓｔｉｔｕｔｅ　ｏｆ　Ｅｌｅｃｔｒｉｃａｌ　ａｎｄ　Ｅｌｅｃｔｒｏｎｉｃｓ　Ｅｎｇｉｎｅｅｒｓ，　０１−Ｍａｙ−１９８５
【００１３】
【発明が解決しようとする課題】
しかしながら、上記のような浮動小数点数値の格納フォーマットでは、たとえば指数部の値だけを取り出したいような場合、元の３２ビットデータから、最上位の１ビットと下位側の２３ビットとを切り離すという処理を行う必要があり、多大の処理量を要するという問題がある。
【００１４】
一方、仮数部の値だけを取り出したいような場合、元の３２ビットデータのうち、下位側の２３ビットだけを取り出した後に、先に示した（１・ｋ）の処理を施す必要があり、この場合にも、やはり多大の処理量を要するという問題がある。
【００１５】
また、上記のような浮動小数点フォーマットで格納された実数ｘとｙとの乗算を行う場合、ｘ＝ａ＊２＾ｎ、ｙ＝ｂ＊２＾ｍとすると、
ｘ＊ｙ＝（ａ＊２＾ｎ）＊（ｂ＊２＾ｍ）＝ａ＊ｂ＊２＾（ｎ＋ｍ）
であるので、ｘ、ｙそれぞれのビットフィールドの仮数部どうしの乗算と、指数部どうしの加算とを行う必要があるが、乗算の度に、それぞれのビットフィールドから仮数部と指数部それぞれを切り出す必要があり、多大の処理量を要するという問題がある。
【００１６】
一方、上記のような固定小数点数値の格納フォーマットでは、演算に際して、指数部と仮数部とを切り離すという処理が不要なので、浮動小数点ファーマットに比べて処理量が少ないが、表現可能な値の範囲が制限されてしまうという問題がある。
【００１７】
そこで、本発明は、このような従来の問題点に鑑みてなされたものであり、浮動小数点フォーマットを採用することによる表現可能な数値範囲の広さと、固定小数点フォーマットを採用することによる演算速度の高速化とを両立させることが可能な浮動小数点格納方法及び浮動小数点演算装置を提供することを目的とする。
【００１８】
【課題を解決するための手段】
上記の目的を達成するために、本発明に係る浮動小数点格納方法は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、該ａ、ｎをＮビット（Ｎ≧（Ｕ＋Ｌ））のビットフィールドに格納する浮動小数点格納方法であって、上記ビットフィールドの上位側のＵビットに仮数部を固定小数点数値で格納し、上記ビットフィールドの下位側のＬビットに指数部を整数で格納することを特徴とする。
【００１９】
ここで、前記浮動小数点格納方法において、上記Ｎ、Ｌは８の倍数としてもよい。
また、上記目的を達成するために、本発明に係る浮動小数点演算装置は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、２つの実数を乗算して得られる値を浮動小数点数値で出力する浮動小数点演算装置であって、上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような第１及び第２のレジスタと、該第１のレジスタの値と該第２のレジスタの値とを乗算する乗算器と、該第１のレジスタの値と該第２のレジスタの値とを加算する加算器と、上記乗算器の出力の上位側Ｕビットと、上記加算器の出力の下位側Ｌビットとを結合するビット結合器とを有することを特徴とする。
【００２０】
また、本発明に係る浮動小数点演算装置は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、２つの実数を乗算して得られる値を固定小数点数値で出力する浮動小数点演算装置であって、上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような第１及び第２のレジスタと、上記第１のレジスタの値と上記第２のレジスタの値とを乗算する乗算器と、上記第１のレジスタの値と上記第２のレジスタの値とを加算する加算器と、上記乗算器の出力の上位側ビットの値を、上記加算器の出力の下位側Ｌビットの値に応じてビットシフトするビットシフタとを有していてもよい。
【００２１】
また、本発明に係る浮動小数点演算装置は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、実数を整数に変換する浮動小数点演算装置であって、上位側のＵビットが仮数部を固定小数点数で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような浮動小数点数値を格納するレジスタと、前記レジスタに格納された値を前記レジスタの下位側のＬビットが示す値に応じてビットシフトするビットシフタとを備えることを特徴とする。
【００２２】
そして、前記浮動小数点演算装置は、さらに、前記レジスタのビット数をＮ、前記仮数部格納フィールドにおける小数点位置より上位のビット数をＳ、前記レジスタの下位側のＬビットが示す値をｘとしたときに、（Ｎ−Ｓ−ｘ）の計算を行う減算器を備え、前記ビットシフタは、前記減算器の出力値が示すビット数だけ、前記レジスタに格納された値をビットシフトしてもよいし、前記減算器は、さらに、予め決定されている数をＸとしたときに、（Ｎ−Ｓ−ｘ−Ｘ）の計算を行い、前記ビットシフタは、前記減算器の出力値が示すビット数だけ、前記レジスタに格納された値をビットシフトしてもよい。
【００２３】
ここで、前記浮動小数点格納方法において、上記Ｎ、Ｌは８の倍数としてもよい。
なお、本発明は、浮動小数点フォーマットの数値どうしの乗算だけでなく、固定小数点フォーマットの数値と浮動小数点フォーマットの数値とを乗算する演算装置として実現してもよいし、それらの演算装置が備える手段をステップとする演算方法として実現してもよい。さらに、本発明は、マイクロプロセッサやＤＳＰ（Ｄｉｇｉｔａｌ　Ｓｉｇｎａｌ　Ｐｒｏｃｅｓｓｏｒ）等のハードウェアとして実現することができるだけでなく、そのような演算方法をコンピュータに実行させるプログラムとして実現することもできる。そして、そのようなプログラムをＣＤ−ＲＯＭ等の記録媒体やインターネット等の伝送媒体を介して流通させることができるは言うまでもない。
【００２４】
【発明の実施の形態】
（実施の形態１）
以下、本発明の実施の形態１における浮動小数点格納方法について図面を参照しながら説明する。
【００２５】
図１は本実施の形態１における浮動小数点格納方法において、実数ｘを格納する時のビットフィールドを示す図である。このビットフィールドは、指数部格納フィールド１１、仮数部格納フィールド１２を含んで構成される。
【００２６】
指数部格納フィールド１１は、実数ｘを、ａ＊２＾ｎで表した時のｎの値が８ビットの整数で格納される。値は例えば２の補数で表現される。仮数部格納フィールド１２は、実数ｘを、ａ＊２＾ｎで表した時のａの値が２４ビットで格納される。値は小数点位置が固定化されている固定小数点数値で表現される。本実施の形態では、ａの値は−１〜＋１の範囲となるように正規化されるものとする。従って、２４ビットのビット構成は、当該２４ビットの最上位ビットが符号情報となり、その直下に小数点が固定化されるような２の補数の固定小数点数値となる。すなわち、最上位ビット（符号ビット）の１ビット下が０．５（２＾（−１））を表現するビット、以下、０．２５（２＾（−２））、０．１２５（２＾（−３））を表現するビット、というような数値表現である。
【００２７】
このようなビットフィールドを持った浮動小数点格納方法の具体例について以下説明する。
まず、例えば、実数ｘ＝２９．２５を本実施例の浮動小数点格納方法で格納する場合について説明する。
【００２８】
実数ｘをａ＊２＾ｎと表現する場合、
２９．２５＝０．９１４０６２５＊２＾５
であるので、ａ＝０．９１４０６２５、ｎ＝５となる。従って、図１の指数部格納フィールド１１には、５（＝ｂ’０００００１０１）が格納される。仮数部格納フィールド１２には、０．９１４０６２５を２の補数の固定小数点数値で表現した値（ｂ’０１１１０１０１００００００００００００００００）が格納される。
従って、実数２９．２５を表現する全体のビット構成は、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
となる。
【００２９】
次に、実数ｘ＝０．００９０３３２０３１２５を本実施例の浮動小数点格納方法で格納する場合について説明する。
実数ｘをａ＊２＾ｎと表現す場合、
０．００９０３３２０３１２５＝０．５７８１２５＊２＾（−６）
であるので、ａ＝０．５７８１２５、ｎ＝−６となる。従って、図１の指数部格納フィールド１１には、−６（＝ｂ’１１１１１０１０）が格納される。
【００３０】
仮数部格納フィールド１２には、０．５７８１２５を２の補数の固定小数点数値で表現した値（ｂ’０１００１０１０００００００００００００００００）が格納される。
従って、実数０．００９０３３２０３１２５を表現する全体のビット構成は、
ｂ’０１００１０１０００００００００００００００００　１１１１１０１０
となる。
【００３１】
次に、実数ｘ＝−４．００１０９８６３２８１２５を本実施例の浮動小数点格納方法で格納する場合について説明する。
実数ｘをａ＊２＾ｎと表現す場合、
−４．００１０９８６３２８１２５＝−０．５００１３７３２９１０１５６２５＊２＾３
であるので、ａ＝−０．５００１３７３２９１０１５６２５、ｎ＝３となる。従って、図１の指数部格納フィールド１１には、３（＝ｂ’００００００１１）が格納される。仮数部格納フィールド１２には、−０．５００１３７３２９１０１５６２５を２の補数の固定小数点数値で表現した値が格納される。
【００３２】
ここで、負の固定小数点数値に対する２の補数について説明する。
上記−０．５００１３７３２９１０１５６２５の絶対値を２の補数で表現すると、
ｂ’０１０００００００００００１００１０００００００
である。２の補数で負の値を表現する場合は、全ビットを反転し、最下位ビットに１を足すという処理で求められる。従って、−０．５００１３７３２９１０１５６２５の２の補数表現は、
ｂ’１０１１１１１１１１１１１０１１００００００００
となる。従って、実数−０．５００１３７３２９１０１５６２５を表現する全体のビット構成は、
ｂ’１０１１１１１１１１１１１０１１００００００００　００００００１１
となる。
【００３３】
なお、以上の具体例では、指数部格納フィールド１１を８ビット、仮数部格納フィールド１２を２４ビットとしたが、本発明は、このようなビット配分に限られず、値の取り得る範囲に応じて、変更してもよい。例えば、指数部格納フィールドを６ビット、仮数部格納フィールドを２６ビットとした場合は、値の精度（仮数部の表現桁数）は、２ビット分向上するが、値の取り得る範囲が２ビット分小さくなる。
【００３４】
また、本実施の形態では、仮数部格納フィールド１２に格納する値は、−１〜＋１の範囲に正規化された値が格納されるとしたが、例えば、−２〜＋２の範囲に正規化されるとしてもよい。
【００３５】
図２は、指数部のビットフィールド３１を６ビット、仮数部のビットフィールド３２を２６ビット、仮数部の値の正規化を−２〜＋２の範囲とした場合のビットフィールドを示す。本図に示すように、小数点位置が、最上位ビットから見て、２ビット目と３ビット目の間に固定化される。例えば、先の例では、
実数２９．２５を表現する全体のビット構成は、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
すなわち、２９．２５＝０．９１４０６２５＊２＾５
と表現したが、図２に示すビットフィールドの場合は、
２９．２５＝１．８２８１２５＊２＾４
と表現することになり、かつ指数部は６ビットであるので、全体のビット構成は、
ｂ’０１１１０１０１００００００００００００００００００　０００１００
となる。
【００３６】
以上のように本実施の形態によれば、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、該ａ、ｎをＮビット（Ｎ≧（Ｕ＋Ｌ））のビットフィールドに格納する際、上記ビットフィールドの上位側のＵビットに仮数部を固定小数点数値で格納し、上記ビットフィールドの下位側のＬビットに指数部を整数で格納することによって、仮数部が上位側ビットフィールドに集中し、指数部は下位側ビットフィールドに集中するので、仮数部を取り出したいときは、全ビットフィールドの上位側のフィールドのみを切り出せば容易に取り出せるし、指数部を取り出したいときは、全ビットフィールドの下位側のフィールドのみを切り出せば容易に取り出せることとなる。
【００３７】
また、本実施の形態における浮動小数点格納方法によれば、全体のビットフィールドの上位側に仮数部が格納され、その仮数部と連続する下位側に指数部が格納されるので、仮数部を取り出す際に、下位側（指数部）のフィールドを切り離す処理を省略しても、つまり、切り出し処理なしに全ビット一括で取り出しその値をそのまま仮数部の値と見なしても、それによって生じる数値データの誤差は、高々２＾（−２４）以下であるので、実質的にその誤差ははほとんど無視し得るものであり、仮数部の値を取り出す際は、ビットフィールドの切り出し処理は実質的に不要となる。ここに、本実施の形態における浮動小数点格納方法の最大のメリットがある。
【００３８】
例えば、先に述べた例では、実数２９．２５を表現する全体のビット構成を、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
すなわち、
２９．２５＝０．９１４０６２５＊２＾５
と表現した。ここで正確には、符号ビットをむくめた仮数部は、上位側２４ビットであるが、仮に、３２ビットすべてを仮数部と見なしても、仮数部の値は、
０．９１４０６２５０２３２……
となり、誤差としては微小である。従って、当該浮動小数点数値の値を求める場合、全ビットフィールドをそのままアクセスすることによって得られる値を仮数部とし、下位側のビットのみアクセスすることによって得られる値を指数部とすることによって、ほぼ正確な浮動小数点数値を得られるので、ビット切り出し処理が極めて少なくて済むこととなる。
【００３９】
また、特に、指数部格納フィールド１１を全ビットフィールドの最下位８ビットとすることによって、以下に述べる特別な効果がさらに得られる。
図３は、図１に示されたフォーマットの数値データをメモリに格納した際のメモリ上のビットフィールドの配置を示した図である。ワード単位でのアクセスされる場合には、本図のワード単位でのアクセス範囲２０に示されるように、浮動少数点で表された実数値の単位で、読み書きされる。一方、バイト単位でアクセスされる場合には、本図のバイト単位でのアクセス範囲２１に示されるように、指数部格納フィールド１１の単位で、読み書きされる。なお、図１２に示された従来のフォーマットでは、指数部格納フィールド７１は、全ビットフィールドにおけるバイトアラインされた位置に格納されていないので、本実施の形態のように、１回のバイトアクセスによって読み書きすることはできない。
【００４０】
このように、指数部格納フィールドが全ビットフィールドの下位側８ビットに配置されている場合、全ビットフィールドの下位８ビットが格納されている領域をバイト単位でアクセスすることによって、１回のアクセスで指数部が取り出せることとなり、極めて高速に指数部取り出しが可能となる。
【００４１】
（実施の形態２）
次に本発明の実施の形態２における浮動小数点演算装置について、図面を参照しながら説明する。
【００４２】
図４は本実施の形態２における浮動小数点演算装置１００の構成を示すブロック図である。なお、本実施の形態では、浮動小数点数値ｘ、ｙを乗算する演算装置１００について述べるが、浮動小数点数値の格納フォーマットは、先に実施の形態１で述べたフォーマットに準拠しているものとする。また、乗算の方法は、
ｘ＝ａ＊（２＾ｎ）、ｙ＝ｂ＊（２＾ｍ）
としたときに、
ｘ＊ｙ＝ａ＊ｂ＊（２＾（ｎ＋ｍ））
の式に基づいて行うので、仮数部どうしの乗算と、指数部どうしの加算が主な演算となる。
【００４３】
この浮動小数点演算装置１００は、３２ビット長の２つの実数の乗算を算出し、その結果を浮動少数点フォーマットで出力する演算回路であり、第１のレジスタ１０１、第２のレジスタ１０２、乗算器１０３、加算器１０４及びビット結合器１０５から構成される。
【００４４】
実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、第１のレジスタ１０１は、上位側の２４ビットが仮数部格納フィールドで、下位側の８ビットが指数部格納フィールドであるような実数値を格納する３２ビットのレジスタであり、第２のレジスタ１０２は、同様に、上位側の２４ビットが仮数部格納フィールドで、下位側の８ビットが指数部格納フィールドであるような実数値を格納する３２ビットのレジスタであり、乗算器１０３は、該第１のレジスタ１０１の値と該第２のレジスタ１０２の値とを乗算する乗算器、加算器１０４は、該第１のレジスタ１０１の値と該第２のレジスタ１０２の値とを加算する加算器、ビット結合器１０５は、上記乗算器１０３の出力の上位側２４ビットと、加算器１０４の出力の下位側８ビットとを結合するビット結合器である。
【００４５】
ここで、上記第１のレジスタ１０１及び、上記第２のレジスタ１０２に格納されている浮動小数点数値の格納のフォーマットは、図１に示すフォーマットであり、先に実施の形態１で述べたものと同様であるので、たとえば、実数２９．２５を表現する全体のビット構成は、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
となる。実数０．００９０３３２０３１２５を表現する全体のビット構成は、
ｂ’０１００１０１０００００００００００００００００　１１１１１０１０
となる。
【００４６】
このようなビットフィールドを持った数値を扱う、浮動小数点演算装置１００について以下説明する。いま、第１のレジスタ１０１には、値として、２９．２５が格納されているのもとする。すなわちビット構成は、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
となる。そして、第２のレジスタ１０２には、値として、０．００９０３３２０３１２５が格納されているのもとする。すなわちビット構成は、
ｂ’０１００１０１０００００００００００００００００　１１１１１０１０
となる。
【００４７】
乗算器１０３は、該第１のレジスタ１０１の値と該第２のレジスタ１０２の値とを乗算する。この乗算は、仮数部どうしの乗算を行う過程であるので、正確には、３２ビットの全体のビットフィールドから下位８ビットの指数部を切り離した形で仮数部を取り出し、当該仮数部どうしを乗算するのであるが、本実施の形態では、３２ビットの全ビットフィールドを取り出し、そのまま当該値を乗算するものとする。これによって本来の値からは誤差が生じるが、その誤差は高々２＾（−２４）以下であるので、実質的には無視できる。
【００４８】
具体的に上記の例では、第１のレジスタに格納されている仮数部の値は、正確には、
ｂ’０１１１０１０１００００００００００００００００
であるので、１０進数で表現すれば、０．９１４０６２５となる。
【００４９】
一方、全ビットフィールドを仮数部と見た場合は、
ｂ’０１１１０１０１０００００００００００００００００００００１０１
であるので、１０進数で表現すれば、０．９１４０６２５０２３２８３１………となる。また、第２のレジスタに格納されている仮数部の値は、正確には、
ｂ’０１００１０１０００００００００００００００００
であるので、１０進数で表現すれば、０．５７８１２５となる。
【００５０】
一方、全ビットフィールドを仮数部と見た場合は、
ｂ’０１００１０１０００００００００００００００００１１１１１０１０
であるので、１０進数で表現すれば、０．５７８１２５１１６４１５３２………となる。
【００５１】
ところで、正確に切り出した仮数部どうしの乗算結果は、
０．９１４０６２５＊０．５７８１２５０＝０．５２８４４２３８２８１２５であるので、２進数で表現すると
ｂ’０　１００００１１１０１００１００００００００００００００００００
となるが、一方、全ビット仮数部とみなした場合の仮数部どうしの乗算結果は、
０．９１４０６２５０２３２８３１＊０．５７８１２５１１６４１５３２　＝０．５２８４４２４９０５６９４３
であるので、２進数で表現すると
ｂ’０　１００００１１１０１００１００００００００００１１１００１１１
となる。ここで注目するべきことは、正確に切り出した仮数部どうしの乗算結果と、全ビット仮数部とみなした場合の仮数部どうしの乗算結果とは、上記２４ビットまで、一致していることである。つまり、この乗算器１０３は、２つの実数値の仮数部を切り出すという処理を行うことなく、結果として、仮数部だけを切り出して乗算して場合と略等しい値を算出しているので、切り出し処理を省いた分だけ処理時間や回路を削減している。
【００５２】
次に加算器１０４では、該第１のレジスタ１０１の値と該第２のレジスタ１０２の値とを加算する。この加算は、指数部どうしの加算を行う過程であるので、３２ビットの全体のビットフィールドから下位８ビットのみを切り出し、当該指数部どうしを加算するのであるが、本実施の形態では、３２ビットの全ビットフィールドを取り出し、そのまま当該値を加算するものとする。これは、指数部が格納されているビットフィールドが最下位側のフィールドであるので、加算結果の下位側の値は、入力の上位側の値に影響を受けないので、特に入力の上位側を取り離して加算する必要がないためである。具体的に上記の例では、第１のレジスタ１０１の値が、
ｂ’０１１１０１０１０００００００００００００００００００００１０１
であり、第２のレジスタ１０２の値が、
ｂ’０１００１０１０００００００００００００００００１１１１１０１０
であるので、上記加算器の出力は、
ｂ’１０１１１１１１００００００００００００００００１１１１１１１１
となる。当然、上記加算結果の下位８ビットは、入力の下位８ビットを切り出して加算した結果と一致する。
【００５３】
次に、ビット結合器１０５は、上記乗算器１０３の出力の上位側２４ビットと、上記加算器１０４の出力の下位側８ビットとを結合する。
図５は、ビット結合器１０５で行われるビット結合の様子を示すものである。本図の左側に示された６４ビットのデータ１１０は、乗算器１０３からの出力ビット列であり、そのうちのハッチングされた箇所（上位２４ビット）が切り出されるビット、すなわち演算結果として有効な範囲であり、ビット結合器１０５の上位桁に入力される。
【００５４】
一方、本図の右側に示された３２ビットのデータ１１１は、加算器１０４からの出力ビット列であり、そのうちのハッチングされた箇所（下位８ビット）が切り出されるビット、すなわち演算結果として有効な範囲であり、ビット結合器１０５の下位桁に入力される。本図の下部に示される３２ビットのデータ１１２は、６４ビットデータ１１０及び３２ビットデータ１１１それぞれから切り出されたビットが結合された後のビット列である。この３２ビットデータ１１２は、乗算器１０３の出力と加算器１０４の出力それぞれの有効なビットのみが切り出されて結合されたものである。
【００５５】
具体的には、上記乗算器１０３の出力は
ｂ’０１００００１１１０１００１００００００００００１１１００１１１
であり、上記加算器１０４の出力は
ｂ’１０１１１１１１００００００００００００００００１１１１１１１１
であるので、上記ビット結合器の出力は、
ｂ’０１００００１１１０１００１００００００００００１１１１１１１１
となる。
【００５６】
さて、このようにして得られたビット列１１２を本実施の形態の浮動小数点数値格納フォーマットに従って、１０進数に換算してみると、
０．５２８４４２３８２８１２５＊２＾（−１）
＝０．２６４２２１１９１４０６２５
となり、元々の入力値２９．２５と０．００９０３３２０３１２５との乗算結果と一致していることがわかる。
【００５７】
以上のように本実施の形態によれば、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような第１及び第２のレジスタと、該第１のレジスタの値と該第２のレジスタの値とを乗算する乗算器と、該第１のレジスタの値と該第２のレジスタの値とを加算する加算器と、上記乗算器の出力の上位側Ｕビットと、上記加算器の出力の下位側Ｌビットとを結合するビット結合器とを備えることによって、浮動小数点数値の乗算において、仮数部の乗算と指数部の加算とは、入力データの全ビットフィールドに対してそのまま行えばよく、かつ、乗算器の出力の上位側ビットと加算器の出力の下位側ビットのビット結合のみで、乗算結果を浮動小数点フォーマットにフォーマッティングできるので、非常に高速な浮動小数点数値の乗算が可能となる。
【００５８】
なお、本実施の形態では、浮動小数点数値の乗算結果を浮動小数点数値にフォーマッティングして格納したが、乗算結果を固定小数点数値にフォーマッティングすることも容易である。
【００５９】
図６は、そのような浮動小数点演算装置２００の構成を示すブロック図である。浮動小数点演算装置２００は、３２ビット長の２つの実数の乗算を算出し、その結果を固定少数点フォーマットで出力する演算回路であり、第１のレジスタ１０１、第２のレジスタ１０２、乗算器１０３、加算器１０４及びビットシフタ２０１から構成される。なお、上記浮動小数点演算装置１００と同じ構成要素については同一の符号を付している。
【００６０】
図４に示される浮動小数点演算装置１００と異なるのは、ビット結合器１０５の代わりにビットシフタ２０１が搭載されていることである。該ビットシフタ２０１は、乗算器１０３の出力を加算器１０４の出力の下位８ビットの値に応じてビットシフトする３２ビットのシフトレジスタである。先の例と同様の数値を例にとると、乗算器１０３の出力は、
０．５２８４４２３８２８１２５
であり、加算器１０４の出力の下位８ビットの値は−１であるので、上記ビットシフタ２０１は、乗算器の値を１ビットシフトダウンすることにより、結果として、図４に示された浮動小数点演算装置１００による結果と同様に、
０．２６４２２１１９１４０６２５
を生成する。なお、この場合は、指数部の情報は意味がなくなるので指数部の値を下位８ビットに結合する必要はない。
【００６１】
以上、本発明に係る浮動少数点格納方法及び浮動小数点演算装置について、実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではない。
【００６２】
例えば、本発明に係る浮動小数点格納方法は、２つの浮動少数点データを乗算する場合だけでなく、固定小数点数値と浮動小数点数値とを乗算する場合についても、高速化に役立つフォーマットである。したがって、本発明に係る浮動少数点格納方法は、以下のような固定小数点数値を扱う演算装置に適用することができる。
【００６３】
図７は、固定小数点数値と浮動小数点数値とを乗算し、その結果を浮動小数点数値で出力する浮動小数点演算装置３００の構成を示すブロック図である。この浮動小数点演算装置３００は、図４に示された浮動小数点演算装置１００において、加算器１０４を削除したものに等しい構成を備える。なお、第１のレジスタ１０１は、３２ビットの固定小数点数値を格納している。
【００６４】
乗算器１０３は、第１のレジスタ１０１に格納された３２ビットデータと第２のレジスタ１０２に格納された３２ビットデータとを、そのまま（いずれも固定小数点数値として）乗算し、６４ビットの乗算結果を出力する。ビット結合器１０５は、図８に示されるように、乗算器１０３で得られた６４ビットのうちの有効ビット（上位２４ビット）を上位ビットとし、一方、第２のレジスタ１０２に格納されている指数部（下位８ビット）を下位ビットとして結合する。このような浮動小数点演算装置３００であっても、乗算器１０３は、第２のレジスタ１０２に格納された３２ビットデータから仮数部だけを切り出すことなく、３２ビットデータをそのまま乗算することができるので、演算の高速化が図られる。
【００６５】
図９は、固定小数点数値と浮動小数点数値とを乗算し、その結果を固定小数点数値で出力する浮動小数点演算装置４００の構成を示すブロック図である。この浮動小数点演算装置４００は、図６に示された浮動小数点演算装置２００において、加算器１０４を削除したものに等しい構成を備える。なお、第１のレジスタ１０１は、３２ビットの固定小数点数値を格納している。
【００６６】
乗算器１０３は、第１のレジスタ１０１に格納された３２ビットデータと第２のレジスタ１０２に格納された３２ビットデータとを、そのまま（いずれも固定小数点数値として）乗算し、６４ビットの乗算結果を出力する。ビットシフタ２０１は、乗算器１０３で得られた６４ビットのうちの有効ビット（上位２４ビット）を取り出した後に、その値を、第２のレジスタ１０２に格納されている指数部（下位８ビット）の値に応じたビット数だけビットシフトを行う。このような浮動小数点演算装置４００であっても、乗算器１０３は、第２のレジスタ１０２に格納された３２ビットデータから仮数部だけを切り出すことなく、３２ビットデータをそのまま乗算することができるので、演算の高速化が図られる。
【００６７】
（実施の形態３）
次に本発明の実施の形態３における浮動小数点演算装置について、図面を参照しながら説明する。
【００６８】
図１０は、本実施の形態３における浮動小数点数値演算装置の構成を示すブロック図である。浮動小数点演算装置５００は、浮動小数点数値を整数に変換する演算装置であり、第１のレジスタ１０１と、減算器５０１と、ビットシフタ５０２とから構成される。
【００６９】
第１のレジスタ１０１は、実施の形態１と同様のレジスタであり、実数ｘをａ＊　（２＾ｎ）とあらわした時のａを仮数部、ｎを指数部としたときに、上位側の２４ビットが仮数部格納フィールドで、下位側の８ビットが指数部格納フィールドであるような実数ｘを格納するレジスタである。
【００７０】
減算器５０１は、第１のレジスタ１０１の下位側８ビットの値をｘとしたときに、所定の値Ｃからｘを減算する減算器であり、ビットシフタ５０２は、第１のレジスタ１０１に格納された値を、減算器５０１の出力値に対応するビット数だけ、右にシフトするビットシフタである。
【００７１】
ここで、減算器５０１に入力されるＣの値は、図１１に示されるように、第１のレジスタ１０１のビット数をＮ、上記仮数部格納フィールドにおける小数点位置より上位のビット数をＳとしたときに、
Ｃ＝Ｎ−Ｓ
である。たとえば、Ｓの値は、第１のレジスタ１０１に格納されている値のビットフィールドが、図１に示されるフォーマットである場合には、１であり、また、図２に示されるフォーマットである場合には、２である。つまり、このＳは、第１のレジスタ１０１に格納された浮動小数点数値の仮数部格納フィールドにおける小数点位置より上位のビット数を示している。
【００７２】
なお、以下では、第１のレジスタ１０１に格納されている浮動小数点数値のフォーマットは、図１に示されるフォーマットであり、先に実施の形態１で述べたものと同様であるとする。たとえば、実数２９．２５を表現する全体のビット構成は、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
となるとする。
【００７３】
次に、以上のように構成された浮動小数点演算装置５００の具体的な動作を説明する。
いま、第１のレジスタ１０１には、実数として、２９．２５が格納されているのもとする。すなわち、ビット構成として、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
が格納されているとする。
【００７４】
減算器５０１は、第１のレジスタ１０１の下位８ビットの値を上記Ｃの値から減算する。ここでは、Ｃの値は、第１のレジスタ１０１のビット数Ｎが３２、仮数部格納フィールドにおける小数点位置より上位のビット数Ｓが１であるので、Ｃ＝Ｎ−Ｓ
＝３２−１
＝３１
となる。一方、第１のレジスタ１０１の下位８ビットの値は５であるので、減算器５０１の出力値は、
３１−５＝２６
となる。次にビットシフタ５０２は、減算器５０１からの出力値（２６）が示すビット数だけ、第１のレジスタ１０１の値を右にビットシフトする。その結果、第１のレジスタ１０１に格納された実数値、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
は、２６ビットだけ右にビットシフトされ、結果として、
ｂ’０００００００００００００００００００００００００００１１１０１　＝　２９
となる。この値「２９」は、第１のレジスタ１０１に格納されていた浮動小数点数値２９．２５を整数化した値に等しい。
【００７５】
以上のように本実施の形態によれば、実数ｘをａ＊　（２＾ｎ）とあらわした時のａを仮数部、ｎを指数部としたときに、上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような第１のレジスタ１０１と、その第１のレジスタ１０１に格納された値を第１のレジスタ１０１の下位側のＬビットが示す値に応じてビットシフトするビットシフタ５０２とを備えることによって、浮動小数点数値を整数に変換する処理が減算処理とビットシフト処理のみで行えるので、非常に高速に処理できることになる。
【００７６】
なお、本実施の形態では、減算器のプラス側の入力値Ｃとして、（第１のレジスタ１０１のビット数Ｎ）−（第１のレジスタ１０１に格納された浮動小数点数値の仮数部格納フィールドにおける小数点位置より上位のビット数Ｓ）としたが、これに代えて、所定の値Ｘをさらに減算した値としてもよい。例えばＸ＝４とした場合、上記の例では、ビットシフトする量は、
３２−１−５−４＝２２
となり、結果として、
ｂ’０１１１０１０１００００００００００００００００　０００００１０１
は、２２ビットだけ右にビットシフトされ、
ｂ’０００００００００００００００００００００００１１１０１０１００
が得られる。この値は、浮動小数点数値「２９．２５」に対し、小数点以下４ビットの有効数字を備えた数として表現したものになる。このように、上記Ｘの値を適切に設定することによって、浮動小数点数値の小数点以下Ｘビットを有効化させた値の表現が簡単に実現される。
【００７７】
【発明の効果】
以上の説明から明らかなように、本発明に係る浮動小数点格納方法は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、該ａ、ｎをＮビット（Ｎ≧（Ｕ＋Ｌ））のビットフィールドに格納する浮動小数点格納方法であって、上記ビットフィールドの上位側のＵビットに仮数部を固定小数点数値で格納し、上記ビットフィールドの下位側のＬビットに指数部を整数で格納することを特徴とする。
【００７８】
このような格納方法によれば、仮数部が上位側ビットフィールドに集中し、指数部は下位側ビットフィールドに集中するので、仮数部を取り出したいときは、全ビットフィールドの上位側のフィールドのみを切り出せば容易に取り出せるし、指数部を取り出したいときは、全ビットフィールドの下位側のフィールドのみを切り出せば容易に取り出せることとなる。また、仮数部を取り出す際に、下位側のフィールドを切り離す処理を省略しても、つまり、切り出し処理なしに全ビット一括で取り出しその値をそのまま仮数部の値と見なしても、それによって生じる数値データの誤差は、高々２＾（−２４）以下であるので、実質的にその誤差ははほとんど無視し得るものであり、仮数部の値を取り出す際にはビットフィールドの切り出し処理は実質的に不要となる。
【００７９】
ここで、前記浮動小数点格納方法において、上記Ｎ、Ｌは８の倍数としてもよい。このようなサイズとすることで、例えば指数部格納フィールドが全ビットフィールドの下位側８ビットである場合に、そのような数値データをメモリに格納した際、全ビットフィールドの下位８ビットが格納されている領域をバイト単位でアクセスすることによって、自動的に指数部が取り出せることとなり、極めて高速に指数部取り出しが可能となる。
【００８０】
また、本発明に係る浮動小数点演算装置は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、２つの実数を乗算して得られる値を浮動小数点数値で出力する浮動小数点演算装置であって、上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような第１及び第２のレジスタと、該第１のレジスタの値と該第２のレジスタの値とを乗算する乗算器と、該第１のレジスタの値と該第２のレジスタの値とを加算する加算器と、上記乗算器の出力の上位側Ｕビットと、上記加算器の出力の下位側Ｌビットとを結合するビット結合器とを有することを特徴とする。
【００８１】
このような演算装置によれば、浮動小数点数値の乗算において、仮数部の乗算と指数部の加算とは、入力データの全ビットフィールドに対してそのまま行えばよく、かつ、乗算器の出力の上位側ビットと加算器の出力の下位側ビットのビット結合のみで、乗算結果を浮動小数点フォーマットにフォーマッティングできるので、非常に高速な浮動小数点数値の乗算が可能となる。
【００８２】
また、本発明に係る浮動小数点演算装置は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、２つの実数を乗算して得られる値を固定小数点数値で出力する浮動小数点演算装置であって、上位側のＵビットが仮数部を固定小数点数値で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような第１及び第２のレジスタと、上記第１のレジスタの値と上記第２のレジスタの値とを乗算する乗算器と、上記第１のレジスタの値と上記第２のレジスタの値とを加算する加算器と、上記乗算器の出力の上位側ビットの値を、上記加算器の出力の下位側Ｌビットの値に応じてビットシフトするビットシフタとを有していてもよい。
【００８３】
このような演算装置によれば、浮動小数点数値の乗算において、仮数部の乗算と指数部の加算とは、入力データの全ビットフィールドに対してそのまま行えばよく、かつ、乗算器の出力を加算器の出力の下位側の値に基づいてビットシフトするのみで、乗算結果を固定小数点フォーマットにフォーマッティングできることとなる。
【００８４】
また、本発明に係る浮動小数点演算装置は、実数ｘをａ＊　（２＾ｎ）と表した時のａを仮数部、ｎを指数部としたときに、実数を整数に変換する浮動小数点演算装置であって、上位側のＵビットが仮数部を固定小数点数で格納する仮数部格納フィールドで、下位側のＬビットが指数部を整数で格納する指数部格納フィールドであるような浮動小数点数値を格納するレジスタと、前記レジスタに格納された値を前記レジスタの下位側のＬビットが示す値に応じてビットシフトするビットシフタとを備えることを特徴とする。そして、前記浮動小数点演算装置は、さらに、前記レジスタのビット数をＮ、前記仮数部格納フィールドにおける小数点位置より上位のビット数をＳ、前記レジスタの下位側のＬビットが示す値をｘとしたときに、（Ｎ−Ｓ−ｘ）の計算を行う減算器を備え、前記ビットシフタは、前記減算器の出力値が示すビット数だけ、前記レジスタに格納された値をビットシフトする。
【００８５】
このような演算装置によれば、減算器とビットシフタだけで、任意の浮動小数点数値を整数に変換され、極めて小さな回路規模で、実数を整数に変換する変換器が実現される。
【００８６】
ここで、前記減算器は、さらに、予め決定されている数をＸとしたときに、（Ｎ−Ｓ−ｘ−Ｘ）の計算を行い、前記ビットシフタは、前記減算器の出力値が示すビット数だけ、前記レジスタに格納された値をビットシフトしてもよい。
【００８７】
このような演算装置によれば、減算器とビットシフタだけで、任意の浮動小数点数値に対して、その少数点以下Ｘビットを有効化させた数値が得られ、極めて小さな回路規模で、実数を、その少数点以下を有効化させた数値に変換する変換器が実現される。
【００８８】
以上のように、本発明により、従来の浮動小数点フォーマットを変更するだけで、特別な回路等を設けることなく、固定小数点用の演算器だけを用いて浮動小数点数値の乗算が可能になるとともに、乗算の高速化が図られ、さらに、浮動小数点数値の整数化が簡単な回路で実現され、特に、乗算処理が多用される音声処理や画像処理等のマルチメディアデータ処理の高速化技術として、その実用的価値は極めて高い。
【図面の簡単な説明】
【図１】本発明の実施の形態１における浮動小数点数値データの格納フォーマットの一例を示す図である。
【図２】浮動小数点数値データの格納フォーマットの他の例を示す図である。
【図３】図１に示された浮動小数点数値データをメモリに格納した際のビットフィールドの配置を示す図である。
【図４】本発明の実施の形態２における浮動小数点演算装置の構成を示すブロック図である。
【図５】同浮動小数点演算装置におけるビット結合器の動作を示す図である。
【図６】浮動小数点演算装置の他の例の構成を示すブロック図である。
【図７】固定小数点数値と浮動小数点数値とを乗算する浮動小数点演算装置の構成を示すブロック図である。
【図８】同浮動小数点演算装置におけるビット結合器の動作を示す図である。
【図９】固定小数点数値と浮動小数点数値とを乗算する浮動小数点演算装置の他の例の構成を示すブロック図である。
【図１０】本発明の実施の形態３における浮動小数点数値演算装置の構成を示すブロック図である。
【図１１】図１０に示された減算器に入力されるＣの値を説明する図である。
【図１２】ＩＥＥＥ７５４の３２ビット浮動小数点フォーマットのビットフィールドを示す図である。
【図１３】（ａ）は、固定小数点数値のフォーマットを示す図であり、（ｂ）は、固定小数点数値の他の例のフォーマットを示す図である。
【符号の説明】
１１、３１　　指数部格納フィールド
１２、３２　　仮数部格納フィールド
２０　　ワード単位でのアクセス範囲
２１　　バイト単位でのアクセス範囲
１００、２００、３００、４００、５００　　浮動小数点演算装置
１０１　　第１のレジスタ
１０２　　第２のレジスタ
１０３　　乗算器
１０４　　加算器
１０５　　ビット結合器
２０１、５０２　　ビットシフタ
５０１　　減算器
【図１】
2004078886.tif 000003
【図２】
2004078886.tif 000004
【図３】
2004078886.tif 000005
【図４】
2004078886.tif 000006
【図５】
2004078886.tif 000007
【図６】
2004078886.tif 000008
【図７】
2004078886.tif 000009
【図８】
2004078886.tif 000010
【図９】
2004078886.tif 000011
【図１０】
2004078886.tif 000012
【図１１】
2004078886.tif 000013
【図１２】
2004078886.tif 000014
【図１３】
2004078886.tif 000015