(57)【要約】【課題】非正規化固定精度浮動小数点数の除算を行うことができる除算装置を提供することを課題とする。【解決手段】除算装置は、被除数及び除数となる浮動小数点数の仮数部の上位に連続するゼロの数を第１及び第２の計数値として計数する計数回路（８０３，８０４）と、第１及び第２の計数値だけ被除数及び除数の仮数部を左シフトするシフト回路（８０５，８０６）と、第１の計数値及び第２の計数値を基に商の桁数予測値を演算する桁数演算回路（８０８）と、シフト回路により左シフトされた被除数及び除数の仮数部を基に、桁単位で商及び剰余を順次出力する除算回路（８１６）と、被除数となる浮動小数点数の指数部から除数となる浮動小数点の指数部を減算した値を出力する減算回路（８０７）と、商の浮動小数点数の仮数部及び指数部を出力する制御回路（８２４）とを有する。【選択図】図８
2014041473.tif 000002
【特許請求の範囲】
【請求項１】
被除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第１の計数回路と、
除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第２の計数回路と、
前記第１の計数回路が計数した第１の計数値だけ前記被除数の仮数部を左シフトする第１のシフト回路と、
前記第２の計数回路が計数した第２の計数値だけ前記除数の仮数部を左シフトする第２のシフト回路と、
前記第１の計数値及び前記第２の計数値を基に商の桁数予測値を演算する桁数演算回路と、
前記第１のシフト回路により左シフトされた被除数の仮数部と、前記第２のシフト回路により左シフトされた除数の仮数部とを基に、桁単位で商及び剰余を順次出力する除算回路と、
前記被除数となる浮動小数点数の指数部から前記除数となる浮動小数点の指数部を減算した値を出力する減算回路と、
前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロになる場合、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値を商の浮動小数点数の指数部として出力する制御回路と
を有することを特徴とする除算装置。
【請求項２】
前記制御回路は、前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロでない場合には、前記除算回路が出力する剰余がゼロになるまで、前記除算回路に桁単位の商及び剰余を出力させ続け、前記除算回路が出力する剰余がゼロになった場合には、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値から、前記商の桁数が前記商の桁数予測値を超えた値だけ減算した値を商の浮動小数点数の指数部として出力することを特徴とする請求項１記載の除算装置。
【請求項３】
さらに、前記除算回路が出力する商の桁数が固定精度の桁数になり、かつ前記除算回路が出力する剰余がゼロでない場合には、前記除算回路が出力する商に対して丸め処理を行い、前記丸め処理した商を商の浮動小数点数の仮数部として出力する丸め処理回路を有することを特徴とする請求項１又は２記載の除算装置。
【請求項４】
前記制御回路は、前記商の桁数予測値がゼロより小さい場合には、前記減算回路により出力された値に対して前記商の桁数予測値を加算した値を演算し、前記加算した値から前記商の桁数だけ減算した値を商の浮動小数点数の指数部として出力することを特徴とする請求項１〜３のいずれか１項に記載の除算装置。
【請求項５】
さらに、前記被除数となる浮動小数点数の正負符号及び前記除数となる浮動小数点数の正負符号を入力し、両者の正負符号が同じであれば、商の浮動小数点数の正負符号を正として出力し、両者の正負符号が異なれば、商の浮動小数点数の正負符号を負として出力する正負符号演算回路を有することを特徴とする請求項１〜４のいずれか１項に記載の除算装置。
【請求項６】
前記桁数演算回路は、前記第２の計数値に対して前記第１の計数値を減算して１を加算した値を前記商の桁数予測値として演算することを特徴とする請求項１〜５のいずれか１項に記載の除算装置。
【請求項７】
前記制御回路は、固定レイテンシの計数値を計数後に、前記商の浮動小数点数の仮数部及び指数部を出力することを特徴とする請求項１〜６のいずれか１項に記載の除算装置。
【請求項８】
固定小数点数モードでは、
前記第１の計数回路及び前記第１のシフト回路は、前記被除数の浮動小数点数の仮数部の代わりに、被除数の固定小数点数を入力し、
前記第２の計数回路及び前記第２のシフト回路は、前記除数の浮動小数点数の仮数部の代わりに、除数の固定小数点数を入力し、
前記制御回路は、前記商の浮動小数点数の仮数部の代わりに、商の固定小数点数を出力することを特徴とする請求項１〜７のいずれか１項に記載の除算装置。
【請求項９】
第１の計数回路が、被除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数し、
第２の計数回路が、除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数し、
第１のシフト回路が、前記第１の計数回路が計数した第１の計数値だけ前記被除数の仮数部を左シフトし、
第２のシフト回路が、前記第２の計数回路が計数した第２の計数値だけ前記除数の仮数部を左シフトし、
桁数演算回路が、前記第１の計数値及び前記第２の計数値を基に商の桁数予測値を演算し、
除算回路が、前記第１のシフト回路により左シフトされた被除数の仮数部と、前記第２のシフト回路により左シフトされた除数の仮数部とを基に、桁単位で商及び剰余を順次出力し、
減算回路が、前記被除数となる浮動小数点数の指数部から前記除数となる浮動小数点の指数部を減算した値を出力し、
制御回路が、前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロになる場合には、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値を商の浮動小数点数の指数部として出力することを特徴とする除算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、除算装置及び除算方法に関する。
【背景技術】
【０００２】
正規化された浮動小数点数の仮数部の除算を行うための除算回路を有する浮動小数点除算装置が知られている（例えば、特許文献１参照）。第１のゼロ検出回路は、被除数となる正規化浮動小数点数の仮数部または固定小数点数の上位に連続するゼロの数を検出する。第２のゼロ検出回路は、除数となる正規化浮動小数点数の仮数部または固定小数点数の上位に連続するゼロの数を検出する。第１の左シフト回路は、第１のゼロ検出回路によって検出されたゼロの数だけ被除数を左シフトして除算回路に供給する。第２の左シフト回路は、第２のゼロ検出回路によって検出されたゼロの数だけ除数を左シフトして除算回路に供給する。減算器は、第１及び第２のゼロ検出回路で検出されたゼロの数を減算する。シフト回路は、第１及び第２の左シフト回路による左シフト後の被除数及び除数を対象とする除算回路の除算結果を減算器の減算結果の示す数の絶対値だけその減算結果の正負に応じて右または左シフトする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−４０６０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１は、ＩＥＥＥ７５４の浮動小数点２進数形式のように非正規化数を正規化数に変換できるフォーマットの浮動小数点数の除算を行うことは可能である。しかし、特許文献１は、ＩＥＥＥ７５４−２００８の浮動小数点１０進数形式のように、元々正規化数が定義されていないフォーマットの浮動小数点の除算を行うことが困難である。
【０００５】
１つの側面では、本発明の目的は、ＩＥＥＥ７５４−２００８の浮動小数点１０進数形式のように、元々正規化数が定義されていない非正規化固定精度浮動小数点数の除算を行うことができる除算装置及び除算方法を提供することである。
【課題を解決するための手段】
【０００６】
除算装置は、被除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第１の計数回路と、除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第２の計数回路と、前記第１の計数回路が計数した第１の計数値だけ前記被除数の仮数部を左シフトする第１のシフト回路と、前記第２の計数回路が計数した第２の計数値だけ前記除数の仮数部を左シフトする第２のシフト回路と、前記第１の計数値及び前記第２の計数値を基に商の桁数予測値を演算する桁数演算回路と、前記第１のシフト回路により左シフトされた被除数の仮数部と、前記第２のシフト回路により左シフトされた除数の仮数部とを基に、桁単位で商及び剰余を順次出力する除算回路と、前記被除数となる浮動小数点数の指数部から前記除数となる浮動小数点の指数部を減算した値を出力する減算回路と、前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロになる場合、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値を商の浮動小数点数の指数部として出力する制御回路とを有する。
【発明の効果】
【０００７】
正規化数が定義されていない非正規化固定精度浮動小数点数の除算を行うことができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、固定小数点数の除算方法を説明するための図である。
【図２】図２は、浮動小数点数の除算方法を説明するための図である。
【図３】図３は、正規化数が定義されていない非正規化固定精度浮動小数点数の除算方法を説明するための図である。
【図４】図４は、第１の実施形態による第１の除算方法を説明するための図である。
【図５】図５は、第１の実施形態による第２の除算方法を説明するための図である。
【図６】図６は、第１の実施形態による第３の除算方法を説明するための図である。
【図７】図７は、第１の実施形態による第４の除算方法を説明するための図である。
【図８】図８は、第１の実施形態による除算装置の構成例を示す図である。
【図９】図９は、図８の除算ループ回路の構成例を示す図である。
【図１０】図１０（Ａ）〜（Ｄ）は、図８の制御回路の制御方法を示す図である。
【図１１】図１１は、第２の実施形態による除算装置の構成例を示す図である。
【図１２】図１２（Ａ）〜（Ｄ）は、図１１の制御回路の制御方法を示す図である。
【図１３】図１３は、第３の実施形態による除算装置の構成例を示す図である。
【図１４】図１４（Ａ）及び（Ｂ）は、図１３の制御回路の制御方法を示す図である。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は、固定小数点数の除算方法を説明するための図である。「００１０００」は、被除数となる固定小数点１０進数である。「００００３０」は、除数となる固定小数点１０進数である。第１のリーディングゼロカウント値Ｐ１は、被除数の「００１０００」の上位に連続するゼロの数であり、「２」である。第２のリーディングゼロカウント値Ｐ２は、除数の「００００３０」の上位に連続するゼロの数であり、「４」である。「１．０００００」は、被除数の「００１０００」を第１のリーディングゼロカウント値Ｐ１の「２」だけ左シフトした正規化数である。「３．０００００」は、除数の「００００３０」を第２のリーディングゼロカウント値Ｐ２の「４」だけ左シフトした正規化数である。「０．３３３３３」は、被除数の正規化数の「１．０００００」を除数の正規化数の「３．０００００」で除算した商である。その右隣の値Ｐの「−２」は、Ｐ１−Ｐ２＝２−４＝−２で表される。商の「３３．３３３３０」は、商の「０．３３３３３」を値Ｐの「−２」だけ右シフトした値である。商の出力ＯＵＴ１は、「３３」の固定小数点数である。「３３」は、商の「３３．３３３３０」の整数部である。
【００１０】
図２は、浮動小数点数の除算方法を説明するための図である。浮動小数点数は、仮数部ｓｆ及び指数部ｅｘｐを有し、１０進数の場合には、ｓｆ×１０expで表される。被除数は、「０．０１０００」の仮数部及び「０」の指数部を有する。除数は、「０．０００３０」の仮数部及び「０」の指数部を有する。第１のリーディングゼロカウント値Ｐ１は、被除数の仮数部の「０．０１０００」の上位に連続するゼロの数であり、「２」である。第２のリーディングゼロカウント値Ｐ２は、除数の「０．０００３０」の上位に連続するゼロの数であり、「４」である。被除数の正規化仮数部の「１．０００００」は、被除数の仮数部の「０．０１０００」を第１のリーディングゼロカウント値Ｐ１の「２」だけ左シフトした正規化数である。除数の正規化仮数部の「３．０００００」は、除数の仮数部の「０．０００３０」を第２のリーディングゼロカウント値Ｐ２の「４」だけ左シフトした正規化数である。被除数の正規化指数部の「−２」は、被除数の指数部の「０」から第１のリーディングゼロカウント値Ｐ１の「２」を減算し、０−２＝−２で表される。除数の正規化指数部の「−４」は、除数の指数部の「０」から第２のリーディングゼロカウント値Ｐ２の「４」を減算し、０−４＝−４で表される。商の仮数部の「０．３３３３３３」は、被除数の正規化仮数部の「１．０００００」を除数の正規化仮数部の「３．０００００」で除算した商である。商の指数部の「２」は、被除数の正規化指数部の「−２」から除数の正規化指数部の「−４」を減算し、（−２）−（−４）＝２で表される。その右隣の値Ｐの「−２」は、Ｐ１−Ｐ２＝２−４＝−２で表される。商の仮数部の「３３．３３３３０」は、商の仮数部の「０．３３３３３３」を値Ｐの「−２」だけ右シフトした値である。その右隣の指数部の「０」は、その上の指数部の「２」と値Ｐの「−２」を加算し、２＋（−２）＝０で表される。商の仮数部の「３３．３３３３０」及び指数部の「０」を正規化し、商の出力ＯＵＴ２が得られる。商の出力ＯＵＴ２は、「３．３３３３３」の仮数部と「１」の指数部を有する。商の出力ＯＵＴ２は、正規化数のフォーマットが定義されている規格の例を示すので、このような正規化数への変換が可能である。
【００１１】
図３は、ＩＥＥＥ７５４−２００８の浮動小数点１０進数形式のように、正規化数が定義されていない非正規化固定精度浮動小数点数の除算方法を説明するための図である。被除数は、「００１０００」の仮数部及び「０」の指数部を有する。除数は、「００００３０」の仮数部及び「０」の指数部を有する。第１のリーディングゼロカウント値Ｐ１は、被除数の仮数部の「００１０００」の上位に連続するゼロの数であり、「２」である。第２のリーディングゼロカウント値Ｐ２は、除数の仮数部の「００００３０」の上位に連続するゼロの数であり、「４」である。被除数の正規化仮数部の「１．０００００」は、被除数の仮数部の「００１０００」を第１のリーディングゼロカウント値Ｐ１の「２」だけ左シフトした正規化数である。除数の正規化仮数部の「３．０００００」は、除数の仮数部の「００００３０」を第２のリーディングゼロカウント値Ｐ２の「４」だけ左シフトした正規化数である。被除数の正規化指数部の「−２」は、被除数の指数部の「０」から第１のリーディングゼロカウント値Ｐ１の「２」を減算し、０−２＝−２で表される。除数の正規化指数部の「−４」は、除数の指数部の「０」から第２のリーディングゼロカウント値Ｐ２の「４」を減算し、０−４＝−４で表される。商の仮数部の「０．３３３３３３」は、被除数の正規化仮数部の「１．０００００」を除数の正規化仮数部の「３．０００００」で除算した商である。商の指数部の「２」は、被除数の正規化指数部の「−２」から除数の正規化指数部の「−４」を減算し、（−２）−（−４）＝２で表される。その右隣の値Ｐの「−２」は、Ｐ１−Ｐ２＝２−４＝−２で表される。商の仮数部の「３３．３３３３０」は、商の仮数部の「０．３３３３３３」を値Ｐの「−２」だけ右シフトした値である。その右隣の指数部の「０」は、その上の指数部の「２」と値Ｐの「−２」を加算し、２＋（−２）＝０で表される。ＩＥＥＥ７５４−２００８の浮動小数点１０進数形式では、正規化数が定義されていないため、商の出力ＯＵＴ３を決めることが困難であり、商の精度の低下を招く可能性がある。
【００１２】
図４は、第１の実施形態による第１の除算方法を説明するための図である。第１の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「００１０００」の仮数部及び「０」の指数部を有する。除数は、「００００５０」の仮数部及び「０」の指数部を有する。第１のリーディングゼロカウント値ＬＺＣ１は、被除数の仮数部の「００１０００」の上位に連続するゼロの数であり、「２」である。第２のリーディングゼロカウント値ＬＺＣ２は、除数の仮数部の「００００５０」の上位に連続するゼロの数であり、「４」である。被除数の正規化仮数部の「１０００００」は、被除数の仮数部の「００１０００」を第１のリーディングゼロカウント値ＬＺＣ１の「２」だけ左シフトした正規化数である。除数の正規化仮数部の「５０００００」は、除数の仮数部の「００００５０」を第２のリーディングゼロカウント値ＬＺＣ２の「４」だけ左シフトした正規化数である。商の桁数予測値ＤＣは、ＬＺＣ２−ＬＺＣ１＋１＝４−２＋１＝「３」で表される。
【００１３】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「５０００００」で除算した上位１桁目の部分商が「０」になる。部分商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「３」から「２」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００１４】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「５０００００」で除算した上位２桁目の部分商が「２」になる。上位１桁目の部分商の「０」を左シフトし、それに対して、上位２桁目の部分商の「２」を加算することにより、中間商は「「０２」になる。中間商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「２」から「１」になる。上記の除算の中間剰余は０であるので、「Ｙ」になる。
【００１５】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「５０００００」で除算した上位３桁目の部分商が「０」になる。前回の中間商の「０２」を左シフトし、それに対して、上位３桁目の部分商の「０」を加算することにより、中間商は「０２０」になる。中間商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「１」から「０」になる。上記の除算の中間剰余は０であるので、「Ｙ」になる。
【００１６】
ここで、商の桁数予測値ＤＣが０になり、かつ中間剰余が０になったので、商の出力ＯＵＴ４が出力される。商の出力ＯＵＴ４は、「２０」の仮数部と「０」の指数部とを有する。
【００１７】
図５は、第１の実施形態による第２の除算方法を説明するための図である。第２の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「００１０００」の仮数部及び「０」の指数部を有する。除数は、「００００３２」の仮数部及び「０」の指数部を有する。第１のリーディングゼロカウント値ＬＺＣ１は、被除数の仮数部の「００１０００」の上位に連続するゼロの数であり、「２」である。第２のリーディングゼロカウント値ＬＺＣ２は、除数の仮数部の「００００３２」の上位に連続するゼロの数であり、「４」である。被除数の正規化仮数部の「１０００００」は、被除数の仮数部の「００１０００」を第１のリーディングゼロカウント値ＬＺＣ１の「２」だけ左シフトした正規化数である。除数の正規化仮数部の「３２００００」は、除数の仮数部の「００００３２」を第２のリーディングゼロカウント値ＬＺＣ２の「４」だけ左シフトした正規化数である。商の桁数予測値ＤＣは、ＬＺＣ２−ＬＺＣ１＋１＝４−２＋１＝「３」で表される。
【００１８】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位１桁目の部分商が「０」になる。部分商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「３」から「２」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００１９】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位２桁目の部分商が「３」になる。上位１桁目の部分商の「０」を左シフトし、それに対して、上位２桁目の部分商の「３」を加算することにより、中間商は「「０３」になる。中間商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「２」から「１」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００２０】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位３桁目の部分商が「１」になる。前回の中間商の「０３」を左シフトし、それに対して、上位３桁目の部分商の「１」を加算することにより、中間商は「０３１」になる。中間商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「１」から「０」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００２１】
ここで、商の桁数予測値ＤＣが０になったが、中間剰余が０になっていない。この場合、商の桁数予測値ＤＣの予測が外れたので、中間剰余が０になるまで、除算を続ける。
【００２２】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位４桁目の部分商が「２」になる。前回の中間商の「０３１」を左シフトし、それに対して、上位４桁目の部分商の「２」を加算することにより、中間商は「０３１２」になる。中間商の指数部は、デクリメントされ、「０」から「−１」になる。商の桁数予測値ＤＣは、デクリメントされ、「０」から「−１」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００２３】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位５桁目の部分商が「５」になる。前回の中間商の「０３１２」を左シフトし、それに対して、上位５桁目の部分商の「５」を加算することにより、中間商は「０３１２５」になる。中間商の指数部は、デクリメントされ、「−１」から「−２」になる。商の桁数予測値ＤＣは、デクリメントされ、「−１」から「−２」になる。上記の除算の中間剰余は０であるので、「Ｙ」になる。
【００２４】
ここで、商の桁数予測値ＤＣが０以下になり、かつ中間剰余が０になったので、商の出力ＯＵＴ５が出力される。商の出力ＯＵＴ５は、「３１２５」の仮数部と「−２」の指数部とを有する。
【００２５】
図６は、第１の実施形態による第３の除算方法を説明するための図である。第３の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「００１０００」の仮数部及び「０」の指数部を有する。除数は、「００００３０」の仮数部及び「０」の指数部を有する。第１のリーディングゼロカウント値ＬＺＣ１は、被除数の仮数部の「００１０００」の上位に連続するゼロの数であり、「２」である。第２のリーディングゼロカウント値ＬＺＣ２は、除数の仮数部の「００００３０」の上位に連続するゼロの数であり、「４」である。被除数の正規化仮数部の「１０００００」は、被除数の仮数部の「００１０００」を第１のリーディングゼロカウント値ＬＺＣ１の「２」だけ左シフトした正規化数である。除数の正規化仮数部の「３０００００」は、除数の仮数部の「００００３０」を第２のリーディングゼロカウント値ＬＺＣ２の「４」だけ左シフトした正規化数である。商の桁数予測値ＤＣは、ＬＺＣ２−ＬＺＣ１＋１＝４−２＋１＝「３」で表される。
【００２６】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位１桁目の部分商が「０」になる。部分商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「３」から「２」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００２７】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位２桁目の部分商が「３」になる。上位１桁目の部分商の「０」を左シフトし、それに対して、上位２桁目の部分商の「３」を加算することにより、中間商は「「０３」になる。中間商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「２」から「１」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００２８】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位３桁目の部分商が「３」になる。前回の中間商の「０３」を左シフトし、それに対して、上位３桁目の部分商の「３」を加算することにより、中間商は「０３３」になる。中間商の指数部は、「０」のままである。商の桁数予測値ＤＣは、デクリメントされ、「１」から「０」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００２９】
ここで、商の桁数予測値ＤＣが０になったが、中間剰余が０になっていない。この場合、商の桁数予測値ＤＣの予測が外れたので、中間剰余が０になるまで、除算を続ける。
【００３０】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位４桁目の部分商が「３」になる。前回の中間商の「０３３」を左シフトし、それに対して、上位４桁目の部分商の「３」を加算することにより、中間商は「０３３３」になる。中間商の指数部は、デクリメントされ、「０」から「−１」になる。商の桁数予測値ＤＣは、デクリメントされ、「０」から「−１」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００３１】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位５桁目の部分商が「３」になる。前回の中間商の「０３３３」を左シフトし、それに対して、上位５桁目の部分商の「３」を加算することにより、中間商は「０３３３３」になる。中間商の指数部は、デクリメントされ、「−１」から「−２」になる。商の桁数予測値ＤＣは、デクリメントされ、「−１」から「−２」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００３２】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位６桁目の部分商が「３」になる。前回の中間商の「０３３３３」を左シフトし、それに対して、上位６桁目の部分商の「３」を加算することにより、中間商は「０３３３３３」になる。中間商の指数部は、デクリメントされ、「−２」から「−３」になる。商の桁数予測値ＤＣは、デクリメントされ、「−２」から「−３」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００３３】
ここで、商の固定精度の桁数は、６であるとする。中間商の「０３３３３３」は、固定精度の６桁に達し、かつ中間剰余が０でないことになる。ただし、中間商の「０３３３３３」は、最上位桁が「０」である。この場合、最上位桁の「０」を削除しても、その値は変わらないので、除算を続ける。
【００３４】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位７桁目の部分商が「３」になる。前回の中間商の「０３３３３３」を左シフトし、それに対して、上位７桁目の部分商の「３」を加算することにより、固定精度６桁の中間商は「３３３３３３」になる。中間商の指数部は、デクリメントされ、「−３」から「−４」になる。商の桁数予測値ＤＣは、デクリメントされ、「−３」から「−４」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００３５】
ここで、固定精度６桁の中間商の「３３３３３３」は、固定精度の６桁に達し、かつ中間剰余が０でないことになる。中間商の「３３３３３３」は、最上位桁が「３」であり、「０」ではない。この場合、丸め処理のため、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３０００００」で除算した上位８桁目の部分商の「３」を演算する。そして、商の出力ＯＵＴ６が出力される。商の出力ＯＵＴ６は、仮数部の「３３３３３３」と、丸め処理のための上位８桁目の部分商の「３」と、指数部の「−４」とを有する。次に、丸め処理により、例えば、上位８桁目の部分商の「３」が四捨五入され、「３３３３３３」の仮数部と「−４」の指数部とを有する商が出力される。
【００３６】
図７は、第１の実施形態による第４の除算方法を説明するための図である。第４の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「００００１０」の仮数部及び「０」の指数部を有する。除数は、「００３２００」の仮数部及び「０」の指数部を有する。第１のリーディングゼロカウント値ＬＺＣ１は、被除数の仮数部の「００００１０」の上位に連続するゼロの数であり、「４」である。第２のリーディングゼロカウント値ＬＺＣ２は、除数の仮数部の「００３２００」の上位に連続するゼロの数であり、「２」である。被除数の正規化仮数部の「１０００００」は、被除数の仮数部の「００００１０」を第１のリーディングゼロカウント値ＬＺＣ１の「４」だけ左シフトした正規化数である。除数の正規化仮数部の「３２００００」は、除数の仮数部の「００３２００」を第２のリーディングゼロカウント値ＬＺＣ２の「２」だけ左シフトした正規化数である。商の桁数予測値ＤＣは、ＬＺＣ２−ＬＺＣ１＋１＝２−４＋１＝「−１」で表される。
【００３７】
ここで、商の桁数予測値ＤＣがゼロより小さいので、中間剰余が０になるまで、除算を続ける。
【００３８】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位１桁目の部分商が「０」になる。部分商の指数部は、デクリメントされ、「−１」から「−２」になる。商の桁数予測値ＤＣは、デクリメントされ、「−１」から「−２」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００３９】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位２桁目の部分商が「３」になる。上位１桁目の部分商の「０」を左シフトし、それに対して、上位２桁目の部分商の「３」を加算することにより、中間商は「「０３」になる。中間商の指数部は、デクリメントされ、「−２」から「−３」になる。商の桁数予測値ＤＣは、デクリメントされ、「−２」から「−３」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００４０】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位３桁目の部分商が「１」になる。前回の中間商の「０３」を左シフトし、それに対して、上位３桁目の部分商の「１」を加算することにより、中間商は「０３１」になる。中間商の指数部は、デクリメントされ、「−３」から「−４」になる。商の桁数予測値ＤＣは、デクリメントされ、「−３」から「−４」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００４１】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位４桁目の部分商が「２」になる。前回の中間商の「０３１」を左シフトし、それに対して、上位４桁目の部分商の「２」を加算することにより、中間商は「０３１２」になる。中間商の指数部は、デクリメントされ、「−４」から「−５」になる。商の桁数予測値ＤＣは、デクリメントされ、「−４」から「−５」になる。上記の除算の中間剰余は０でないので、「Ｎ」になる。
【００４２】
次に、被除数の正規化仮数部の「１０００００」を除数の正規化仮数部の「３２００００」で除算した上位５桁目の部分商が「５」になる。前回の中間商の「０３１２」を左シフトし、それに対して、上位５桁目の部分商の「５」を加算することにより、中間商は「０３１２５」になる。中間商の指数部は、デクリメントされ、「−５」から「−６」になる。商の桁数予測値ＤＣは、デクリメントされ、「−５」から「−６」になる。上記の除算の中間剰余は０であるので、「Ｙ」になる。
【００４３】
ここで、商の桁数予測値ＤＣが０以下になり、かつ中間剰余が０になったので、商の出力ＯＵＴ７が出力される。商の出力ＯＵＴ７は、「３１２５」の仮数部と「−６」の指数部とを有する。
【００４４】
図８は、第１の実施形態による除算装置の構成例を示す図である。この除算装置は、上記の図４〜図７の除算を行うことができる。被除数となる浮動小数点数は、正負符号ｓｇ１と、仮数部ｓｆ１と、指数部ｅｘｐ１とを有し、１０進数の場合には、（−１）sg1×ｓｆ１×１０exp1で表される。除数となる浮動小数点数は、正負符号ｓｇ２と、仮数部ｓｆ２と、指数部ｅｘｐ２とを有し、１０進数の場合には、（−１）sg2×ｓｆ２×１０exp2で表される。正負符号ｓｇ１及びｓｇ２は、「０」が正を表し、「１」が負を表す。
【００４５】
排他的論理和回路８０１は、正負符号演算回路であり、被除数の正負符号ｓｇ１と除数の正負符号ｓｇ２との排他的論理和値を正負符号ｓｇ０として出力する。すなわち、排他的論理和回路８０１は、被除数となる浮動小数点数の正負符号ｓｇ１及び除数となる浮動小数点数の正負符号ｓｇ２を入力し、両者の正負符号が同じであれば、商の浮動小数点数の正負符号ｓｇ０を正（値「０」）として出力し、両者の正負符号が異なれば、商の浮動小数点数の正負符号ｓｇ０を負（値「１」）として出力する。レジスタ８０２は、正負符号ｓｇ０を保持し、その正負符号ｓｇ０を商の浮動小数点数の正負符号ｓｇとして出力する。
【００４６】
減算回路８０７は、被除数となる浮動小数点数の指数部ｅｘｐ１から除数となる浮動小数点の指数部ｅｘｐ２を減算した値ｅｘｐ０（＝ｅｘｐ１−ｅｘｐ２）を出力する。
【００４７】
第１のリーディングゼロカウント回路８０３は、被除数となる浮動小数点数の仮数部ｓｆ１の上位に連続するゼロの数を第１のリーディングゼロカウント値ＬＺＣ１としてカウントする。第２のリーディングゼロカウント回路８０４は、除数となる浮動小数点数の仮数部ｓｆ２の上位に連続するゼロの数を第２のリーディングゼロカウント値ＬＺＣ２としてカウントする。
【００４８】
第１の左シフト回路８０５は、第１のリーディングゼロカウント値ＬＺＣ１だけ被除数の仮数部ｓｆ１を左シフトし、被除数の正規化仮数部ｓｆｔ１を出力する。第２の左シフト回路８０６は、第２のリーディングゼロカウント値ＬＺＣ２だけ除数の仮数部ｓｆ２を左シフトし、除数の正規化仮数部ｓｆｔ２を出力する。
【００４９】
桁数演算回路８０８は、第２のリーディングカウント値ＬＺＣ２に対して第１のリーディングカウント値ＬＺＣ１を減算して１を加算した値を商の桁数予測値ＤＣ（＝ＬＺＣ２−ＬＺＣ１＋１）として演算し、キャリーアウトｃｏを出力する。キャリーアウトｃｏは、商の桁数予測値ＤＣがゼロ以上である場合には「１」になり、商の桁数予測値ＤＣが負値である場合には「０」になる。
【００５０】
加算回路８０９は、値ｅｘｐ０及び商の桁数予測値ＤＣを加算し、値ｅｘｐ０＋ＤＣを出力する。セレクタ８１０は、キャリーアウトｃｏが「１」である場合には、値ｅｘｐ０を選択して出力し、キャリーアウトｃｏが「０」である場合（例えば図７の場合）には、値ｅｘｐ０＋ＤＣを選択して出力する。
【００５１】
デクリメント回路８１１は、レジスタ８１３の出力値ｅｘｐをデクリメントし、値ｅｘｐ−１を出力する。セレクタ８１２は、初回の部分商の除算では、セレクタ８１０の出力値を選択して出力し、２回目以降の部分商の除算では、デクリメント回路８１１の出力値を選択して出力する。レジスタ８１３の値は、制御回路８２４が出力するレジスタ更新切り替え信号ｅｘｔ等に応じて、セレクタ８１２の出力値に更新され、商の浮動小数点数の指数部ｅｘｐとして出力される。
【００５２】
デクリメント回路８１４は、レジスタ８１８の出力値ＤＣ０をデクリメントし、値ＤＣ０−１を出力する。セレクタ８１５は、初回の部分商の除算では、商の桁数予測値ＤＣを選択して出力し、２回目以降の部分商の除算では、デクリメント回路８１４の出力値を選択して出力する。レジスタ８１８の値は、後述する条件で、セレクタ８１５の出力値に更新され、値ＤＣ０として出力される。
【００５３】
除算ループ回路（除算回路）８１６は、被除数の正規化仮数部ｓｆｔ１と、除数の正規化仮数部ｓｆｔ２とを基に、桁単位で商ｐｑ及び剰余ａｌｌｚを順次出力する。
【００５４】
図９は、図８の除算ループ回路８１６の構成例を示す図である。以下、除算ループ回路８１６の一例を示すが、種々の構成を採用することができる。セレクタ９００は、初回の部分商の除算では、被除数の正規化仮数部ｓｆｔ１を選択して出力し、２回目以降の部分商の除算では、セレクタ９０７の出力値を選択して出力する。レジスタ９０１の値は、レジスタ９０６の出力値ａｌｌｚに応じて、セレクタ９００の出力値に更新され、被除数の仮数部ＳＦＴ１として出力される。レジスタ９０２は、除数の正規化仮数部ｓｆｔ２を記憶し、仮数部ｓｆｔ２を出力する。
【００５５】
減算回路９０４は、除数の仮数部ｓｆｔ２から被除数の仮数部ＳＦＴ１を減算した値を中間剰余ＳＦＴ（＝ｓｆｔ２−ＳＦＴ１）として出力し、キャリーアウトｃｏを出力する。キャリーアウトｃｏは、中間剰余ＳＦＴがゼロ以上であれば「１」になり、中間剰余ＳＦＴが負値であれば「０」になる。
【００５６】
左シフト回路９０５は、被除数の仮数部ＳＦＴ１を１桁左シフトして出力する。セレクタ９０７は、キャリーアウトｃｏが「１」である場合には、中間剰余ＳＦＴを選択して出力し、キャリーアウトｃｏが「０」である場合には、左シフト回路９０５の出力値を選択して出力する。オールゼロ回路９０６は、値ＳＦＴ１のすべての桁が０である場合には「１」のオールゼロ値ａｌｌｚを出力し、それ以外の場合には「０」のオールゼロ値ａｌｌｚを出力する。すなわち、オールゼロ値ａｌｌｚが「１」の場合、中間剰余ＳＦＴ１が０であることを示す。オールゼロ値ａｌｌｚが「１」の場合、レジスタ９０１の値は、０であるので、更新されずに、０を維持する。
【００５７】
論理積（ＡＮＤ）回路９０８は、オールゼロ値ａｌｌｚの論理反転値とキャリーアウトｃｏとの論理積値を出力する。レジスタ９０３は、初期値が０であり、部分商ｐｑを出力する。インクリメント回路９０９は、減算回路９０４が減算を行う毎に、部分商ｐｑをインクリメントし、ｐｑ＋１を出力する。セレクタ９１０は、論理積回路９０８の出力値が「０」である場合には、値「０」を選択して出力し、論理積回路９０８の出力値が「１」である場合には、インクリメント回路９０９の出力値を選択して出力する。レジスタ９０３は、セレクタ９１０の出力値を記憶し、部分商ｐｑを出力する。
【００５８】
以上のように、減算回路９０４は、キャリーアウトｃｏが「１」であれば、減算ができたことになるので、セレクタ９０７は値ＳＦＴを選択し、セレクタ９１０はインクリメント回路９０９の出力値を選択する。ただし、オールゼロ値ａｌｌｚが「１」の場合、中間剰余ＳＦＴ１がゼロであり、部分商の演算を止める必要があるので、セレクタ９１０は値「０」を選択する。これに対し、減算回路９０４は、キャリーアウトｃｏが「０」であれば、減算できなかったことになるので、その桁の部分商の導出は完了とし、セレクタ９０７は、左シフト回路９０５の出力値を選択し、セレクタ９１０は、値「０」を選択する。キャリーアウトｃｏは、値ｐｑｉｎｇとして出力される。
【００５９】
図８において、ｑレジスタ８１９の最下位桁には、除算ループ回路８１６の部分商ｐｑが入力される。左シフト回路８１７は、ｑレジスタ８１９に保持される値を１桁左シフトして出力する。ｑレジスタ９１９は、上位桁に、左シフト回路８１７の出力値が入力され、最下位桁に、部分商ｐｑが入力される。
【００６０】
ｇレジスタ８２０には、図６に示したように、丸め処理用の部分商ｐｑが入力される。ｇレジスタ８２０は、除算ループが終了した段階で、中間剰余がゼロでない場合に、更新される。
【００６１】
ｓレジスタ８２１には、オールゼロ値ａｌｌｚの論理反転値が丸め処理用のスティッキービットとして入力される。ｓレジスタ８２１は、除算ループが終了した段階で中間剰余がゼロでない場合に、更新される。オールゼロレジスタ８２２には、オールゼロ値ａｌｌｚが入力される。
【００６２】
レジスタ８１３，８１８〜８２２は、１桁の部分商が算出される毎に更新される。すなわち、除算ループ回路８１６から出力される信号ｐｑｉｎｇが「１」の間は、レジスタ８１３，８１８〜８２２の値の更新が停止され、信号ｐｑｉｎｇが「０」になると、レジスタ８１３，８１８〜８２２の値が更新される。
【００６３】
図１０（Ａ）〜（Ｄ）は、図８の制御回路８２４の制御方法を示す図である。制御回路８２４は、レジスタ８１８の出力値ＤＣ０と、ｑレジスタ８１９の最上位桁と、オールゼロレジスタ８２２の出力値ａｌｌｚとを入力し、レジスタ更新切り替え信号ｅｘｔを出力する。
【００６４】
図１０（Ａ）は、制御回路８２４が除算ループ終了条件を満たすか否かの判定方法を示す図である。レジスタ８１９の中間商の最上位桁が「０」である場合には、商の桁数予測値ＤＣ０が０以下であり、かつオールゼロ値ａｌｌｚが１である場合に、制御回路８２４は、除算ループ終了条件を満たすと判定する。また、レジスタ８１９の中間商の最上位桁が「１」〜「９」である場合には、図６に示したように、中間商が固定精度の桁数に達したので、制御回路８２４は、除算ループ終了条件を満たすと判定する。
【００６５】
図１０（Ｂ）は、制御回路８２４が出力するレジスタ更新切り替え信号ｅｘｔを説明するための図である。図１０（Ａ）の除算ループ終了条件を満たし、かつオールゼロ値ａｌｌｚが「０」である場合には、制御回路８２４は「１」の信号ｅｘｔを出力し、それ以外の場合には、制御回路８２４は「０」の信号ｅｘｔを出力する。すなわち、図６に示したように、レジスタ８１９の中間商の最上位桁が「１」〜「９」であり、かつオールゼロ値ａｌｌｚが「０」である場合に、信号ｅｘｔが「１」になる。
【００６６】
図１０（Ｃ）は、レジスタ８０２，８１３，８１８〜８２２の更新停止条件を示す図である。正負符号ｓｇのレジスタ８０２は、初回の部分商の除算の時に更新され、２回目以降の部分商の除算の時には更新が停止される。指数部ｅｘｐのレジスタ８１３は、桁数予測値ＤＣ０がゼロ以上、又は、値ｐｑｉｎｇが「１」、又は、信号ｅｘｔが「１」の場合に、更新が停止される。桁数予測値ＤＣ０のレジスタ８１８は、値ｐｑｉｎｇが「１」の場合に、更新が停止される。ｑレジスタ８１９は、値ｐｑｉｎｇが「１」、又は、信号ｅｘｔが「１」の場合に、更新が停止される。ｇレジスタ８２０は、値ｐｑｉｎｇが「１」、又は、信号ｅｘｔが「０」の場合に、更新が停止される。ｓレジスタ８２１は、値ｐｑｉｎｇが「１」、又は、信号ｅｘｔが「０」の場合に、更新が停止される。レジスタ８０２，８１３，８１８〜８２２は、上記の更新停止条件を満たさない場合には更新される。
【００６７】
図１０（Ｄ）は、丸め処理回路８２３の処理例を示す図である。制御回路８２４は、丸めモードに応じて、丸め処理回路８２３を制御する。丸め処理回路８２３は、レジスタ８０２の正負符号ｓｇと、ｑレジスタ８１９の中間商と、ｇレジスタ８２０の部分商と、ｓレジスタ８２１のスティッキービットとを入力し、丸め処理を行い、商の浮動小数点数の仮数部ｓｆを出力する。
【００６８】
まず、丸めモードが「０」の場合を説明する。この丸めモードでは、丸め処理回路８２３は、銀行家丸めと呼ばれている丸め処理を行う。ｑレジスタ８１９の中間商の最下位ビットが「１」である場合（中間商が奇数である場合）、ｇレジスタ８２０の部分商が「５」であり、かつｓレジスタ８２１のスティッキービットが「０」である場合には、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。例えば、「３．５」は、丸め処理により「４」になる。また、ｇレジスタ８２０の部分商が「５」であり、かつｓレジスタ８２１のスティッキービットが「１」である場合には、丸め処理回路８２３は、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。例えば、「２．５１」は、丸め処理により「３」になる。また、ｇレジスタ８２０の部分商が「６」〜「９」である場合には、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。例えば、「２．６」は、丸め処理により「３」になる。
【００６９】
次に、丸めモードが「１」の場合を説明する。この丸めモードでは、丸め処理回路８２３は、切り捨ての丸め処理を行う。丸め処理回路８２３は、ｑレジスタ８１９の中間商をそのまま仮数部ｓｆとして出力する。
【００７０】
次に、丸めモードが「２」の場合を説明する。この丸めモードでは、丸め処理回路８２３は、＋∞の方向に丸め処理を行う。正負符号ｓｇが「０」であり、かつｇレジスタ８２０の部分商が「１」〜「９」の場合には、丸め処理回路８２３は、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。また、正負符号ｓｇが「０」であり、かつｓレジスタ８２１のスティッキービットが「１」の場合には、丸め処理回路８２３は、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。
【００７１】
次に、丸めモードが「３」の場合を説明する。この丸めモードでは、丸め処理回路８２３は、−∞の方向に丸め処理を行う。正負符号ｓｇが「１」であり、かつｇレジスタ８２０の部分商が「１」〜「９」の場合には、丸め処理回路８２３は、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。また、正負符号ｓｇが「１」であり、かつｓレジスタ８２１のスティッキービットが「１」の場合には、丸め処理回路８２３は、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。
【００７２】
次に、丸めモードが「４」の場合を説明する。この丸めモードでは、丸め処理回路８２３は、四捨五入の丸め処理を行う。ｇレジスタ８２０の部分商が「５」〜「９」の場合には、丸め処理回路８２３は、ｑレジスタ８１９の中間商に１を加算し、商の仮数部ｓｆを出力する。
【００７３】
なお、丸め処理が必要ない場合、ｇレジスタ８２０及びｓレジスタ８２１の更新処理をスキップし、丸め処理回路８２３は、丸め処理を行わずに、ｑレジスタ８１９の中間商を仮数部ｓｆとして出力してもよい。
【００７４】
以上の処理により、除算装置は、正負符号ｓｇと、指数部ｅｘｐと、仮数部ｓｆとを含む浮動小数点数の商を出力する。
【００７５】
図４の場合、制御回路８２４は、ｑレジスタ８１９の中間商の桁数が商の桁数予測値ＤＣになり（桁数予測値ＤＣ０が０になり）、かつ除算ループ回路８１６が出力する中間剰余がゼロになった場合（オールゼロ値ａｌｌｚが１になった場合）には、ｑレジスタ８１９の中間商を商の浮動小数点数の仮数部ｓｆとして出力し、減算回路８０７により出力された値ｅｘｐ０を商の浮動小数点数の指数部ｅｘｐとして出力する。
【００７６】
また、図５の場合、制御回路８２４は、ｑレジスタ８１９の中間商の桁数が商の桁数予測値ＤＣになり（桁数予測値ＤＣ０が０になり）、かつ除算ループ回路８１６が出力する中間剰余がゼロでない場合（オールゼロ値ａｌｌｚが０の場合）には、除算ループ回路８１６が出力する中間剰余がゼロになるまで（オールゼロ値ａｌｌｚが１になるまで）、除算ループ回路８１６に桁単位の部分商ｐｑ及び中間剰余を出力させ続け、除算ループ回路８１６が出力する剰余がゼロになった場合（オールゼロ値ａｌｌｚが１になった場合）には、ｑレジスタ８１９の中間商を商の浮動小数点数の仮数部ｓｆとして出力し、減算回路８０７により出力された値ｅｘｐ０から、ｑレジスタ８１９の中間商の桁数が商の桁数予測値ＤＣを超えた値だけ減算した値を商の浮動小数点数の指数部ｅｘｐとして出力する。
【００７７】
また、図６の場合、丸め処理回路８２３は、ｑレジスタ８１９の中間商の桁数が固定精度の桁数になり、かつ除算ループ回路８１６が出力する剰余がゼロでない場合（オールゼロ値ａｌｌｚが０の場合）には、ｑレジスタ８１９の中間商に対して丸め処理を行い、その丸め処理した商を商の浮動小数点数の仮数部ｓｆとして出力する。
【００７８】
また、図７の場合、制御回路８２４は、商の桁数予測値ＤＣがゼロより小さい場合には、減算回路８０７により出力された値ｅｘｐ０に対して商の桁数予測値ＤＣを加算した値を演算し、その加算した値から、ｑレジスタ８１９の中間商の桁数だけ減算した値を商の浮動小数点数の指数部ｅｘｐとして出力する。
【００７９】
本実施形態によれば、非正規化固定精度浮動小数点数の除算を行うことができる。また、デクリメント回路８１１による指数部ｅｘｐの補正を除算ループ動作と並行して行うので、除算ループが終わった後に指数部ｅｘｐの補正のためのオーバーヘッドが発生しない。また、除算ループ回路８１６の部分商の算出のアルゴリズムは問わないので、既存の除算ループ回路８１６を利用することが可能である。
【００８０】
（第２の実施形態）
図１１は、第２の実施形態による除算装置の構成例を示す図である。図１１の除算装置は、図８の除算装置に対して、セレクタ１１０１、デクリメント回路１１０２及びレジスタ１１０３を追加したものである。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００８１】
本実施形態は、６４ビットのＩＥＥＥ７５４−２００８の浮動小数点１０進数形式を入出力フォーマットとした固定レイテンシ除算装置である。レジスタ１１０３は、カウント値ＬＣを保持する。デクリメント回路１１０２は、レジスタ１１０３のカウント値ＬＣをデクリメントし、ＬＣ−１を出力する。セレクタ１１０１には、仮数部ｓｆ１及びｓｆ２の桁数（例えば「１６」）が入力される。桁数「１６」は、固定レイテンシのカウント値である。セレクタ１１０１は、初回の部分商の除算では、初期値「１６」を選択して出力し、２回目以降の部分商の除算では、デクリメント回路１１０２の出力値を選択して出力する。レジスタ１１０３は、セレクタ１１０１の出力値を保持する。レジスタ１１０３のカウント値ＬＣは、制御回路８２４に出力される。制御回路８２４は、レジスタ８１８の出力値ＤＣ０と、ｑレジスタ８１９の最上位桁と、オールゼロレジスタ８２２の出力値ａｌｌｚと、レジスタ１１０３のカウント値ＬＣとを入力し、レジスタ更新切り替え信号ｅｘｔ及びレジスタ更新停止信号ｓｔｐを出力する。
【００８２】
レジスタ１１０３は、レジスタ８１３，８１８〜８２２と同様に、１桁の部分商が算出される毎に更新される。すなわち、値ｐｑｉｎｇ信号が「１」の間は、レジスタ１１０３は更新が停止され、値ｐｑｉｎｇが「０」になると、レジスタ１１０３は更新される。
【００８３】
図１２（Ａ）〜（Ｄ）は、図１１の制御回路８２４の制御方法を示す図である。図１２（Ａ）は、制御回路８２４が除算ループ終了条件を満たすか否かの判定方法を示す図である。レジスタ１１０３のカウント値ＬＣが０以下である場合には、制御回路８２４は、除算ループ終了条件を満たすと判定する。
【００８４】
図１２（Ｂ）は、制御回路８２４が出力するレジスタ更新停止信号ｓｔｐを説明するための図である。ｑレジスタ８１９の中間商の最上位桁が「０」である場合には、商の桁数予測値ＤＣ０が０以下であり、かつオールゼロ値ａｌｌｚが１である場合に、制御回路８２４は、「１」のレジスタ更新停止信号ｓｔｐを出力する。また、レジスタ８１９の中間商の最上位桁が「１」〜「９」である場合には、図６に示したように、中間商が固定精度の桁数に達したので、制御回路８２４は、「１」のレジスタ更新停止信号ｓｔｐを出力する。レジスタ更新停止信号ｓｔｐが「１」になると、レジスタ８１３及び８１９の値の更新が停止される。
【００８５】
図１２（Ｃ）は、制御回路８２４が出力するレジスタ更新切り替え信号ｅｘｔを説明するための図である。図１２（Ａ）の除算ループ終了条件を満たし、かつオールゼロ値ａｌｌｚが「０」である場合には、制御回路８２４は「１」の信号ｅｘｔを出力し、それ以外の場合には、制御回路８２４は「０」の信号ｅｘｔを出力する。すなわち、図６に示したように、レジスタ８１９の中間商の最上位桁が「１」〜「９」であり、かつオールゼロ値ａｌｌｚが「０」である場合に、信号ｅｘｔが「１」になる。
【００８６】
図１２（Ｄ）は、レジスタ８０２，８１３，８１８〜８２２，１１０３の更新停止条件を示す図である。レジスタ８０２，８１３，８１８〜８２２は、図１０（Ｃ）の更新停止条件と同様である。カウント値ＬＣのレジスタ１１０３は、値ｐｑｉｎｇが「１」の場合に、更新が停止され、それ以外の場合には更新される。
【００８７】
以上のように、制御回路８２４は、固定レイテンシのカウント値ＬＣ（初期値が「１６」）をカウント後に、商の浮動小数点数の仮数部ｓｆ及び指数部ｅｘｐを出力する。第１の実施形態の除算装置は、被除数及び除数を入力してから商を出力するまでの時間が、被除数及び除数に応じて可変となる可変レイテンシである。これに対し、本実施形態の除算装置は、被除数及び除数によらず、被除数及び除数を入力してから商を出力するまでの時間が一定となる固定レイテンシである。これにより、除算装置の後段の回路の処理が容易になる。
【００８８】
（第３の実施形態）
図１３は、第３の実施形態による除算装置の構成例を示す図である。図１３の除算装置は、図８の除算装置に対して、小数点数モード信号ＭＤを追加したものである。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００８９】
小数点数モード信号ＭＤは、制御回路８２４に入力される。制御回路８２４は、レジスタ８１８の出力値ＤＣ０と、ｑレジスタ８１９の最上位桁と、オールゼロレジスタ８２２の出力値ａｌｌｚと、小数点数モード信号ＭＤとを入力し、レジスタ更新切り替え信号ｅｘｔを出力する。本実施形態の除算装置は、小数点数モード信号ＭＤを切り替えることにより、第１の実施形態の浮動小数点数の除算の他に、６４ビットのＢＣＤ（二進化十進数：Binary-coded decimal）形式の固定小数点数の入出力フォーマットの除算を行うこともできる。
【００９０】
図１４（Ａ）及び（Ｂ）は、図１３の制御回路８２４の制御方法を示す図である。図１４（Ａ）は、制御回路８２４が除算ループ終了条件を満たすか否かの判定方法を示す図である。
【００９１】
小数点数モード信号ＭＤが「０」の場合、入出力フォーマットが浮動小数点数のモードになる。この場合、本実施形態の除算装置は、第１の実施形態の除算装置と同じ動作をする。すなわち、この場合の除算ループ終了条件は、図１０（Ａ）の除算ループ終了条件と同じである。
【００９２】
小数点数モード信号ＭＤが「１」の場合、入出力フォーマットが固定小数点数のモードになる。この場合、除算装置は、被除数の固定小数点数及び除数の固定小数点数を入力し、商の固定小数点数を出力する。具体的には、第１のリーディングゼロカウント回路８０３及び第１の左シフト回路８０５は、被除数の仮数部ｓｆ１の代わりに被除数の固定小数点数を入力する。第２のリーディングゼロカウント回路８０４及び第２の左シフト回路８０６は、除数の仮数部ｓｆ２の代わりに除数の固定小数点数を入力する。丸め処理回路８２３は、商の仮数部ｓｆの代わりに商の固定小数点数を出力する。なお、正負符号ｓｇ１，ｓｇ２及び指数部ｅｘｐ１，ｅｘｐ２の入力はない。この場合、商の桁数予測値ＤＣ０が０以下である場合に、制御回路８２４は、除算ループ終了条件を満たすと判定する。
【００９３】
図１４（Ｂ）は、制御回路８２４が出力するレジスタ更新切り替え信号ｅｘｔを説明するための図である。図１４（Ａ）の除算ループ終了条件を満たし、かつ小数点数モード信号ＭＤが０であり、かつオールゼロ値ａｌｌｚが「０」である場合には、制御回路８２４は「１」の信号ｅｘｔを出力し、それ以外の場合には、制御回路８２４は「０」の信号ｅｘｔを出力する。
【００９４】
以上のように、小数点数モード信号ＭＤが固定小数点数モードの場合には、第１のリーディングゼロカウント回路８０３及び第１の左シフト回路８０５は、被除数の浮動小数点数の仮数部ｓｆ１の代わりに、被除数の固定小数点数を入力する。第２のリーディングゼロカウント回路８０４及び第２の左シフト回路８０６は、除数の浮動小数点数の仮数部ｓｆ２の代わりに、除数の固定小数点数を入力する。制御回路８２４は、商の浮動小数点数の仮数部ｓｆの代わりに、商の固定小数点数を出力する。
【００９５】
本実施形態によれば、小数点数モード信号ＭＤを０にすることにより、第１の実施形態のように浮動小数点数の除算を行い、小数点数モード信号ＭＤを１にすることにより、固定小数点数の除算を行うことができる。
【００９６】
なお、第１〜第３の実施形態では、１０進数の場合を例に説明したが、１０進数に限定されない。
【００９７】
上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００９８】
８０１  排他的論理和回路
８０２，８１３，８１８〜８２２  レジスタ
８０３  第１のリーディングゼロカウント回路
８０４  第２のリーディングゼロカウント回路
８０５  第１の左シフト回路
８０６  第２の左シフト回路
８０７  減算回路
８０８  桁数演算回路
８０９  加算回路
８１０，８１２，８１５  セレクタ
８１１，８１４  デクリメント回路
８１６  除算ループ回路
８１７  左シフト回路
８２３  丸め処理回路
８２４  制御回路
【図１】
2014041473.tif 000003
【図２】
2014041473.tif 000004
【図３】
2014041473.tif 000005
【図４】
2014041473.tif 000006
【図５】
2014041473.tif 000007
【図６】
2014041473.tif 000008
【図７】
2014041473.tif 000009
【図８】
2014041473.tif 000010
【図９】
2014041473.tif 000011
【図１０】
2014041473.tif 000012
【図１１】
2014041473.tif 000013
【図１２】
2014041473.tif 000014
【図１３】
2014041473.tif 000015
【図１４】
2014041473.tif 000016