(57)【要約】【課題】  浮動小数点数を演算する際、正しく丸められた演算結果を、全体として、より短い時間で得ることができる演算装置を実現する。【解決手段】  第１および第２レジスタ１１・１２の仮数部は、オペランドとして与えられる浮動小数点数よりも、仮数部の桁数が１桁大きな浮動小数点数を格納できるように構成されている。演算回路２１は、より桁の小さな浮動小数点数が格納された第２レジスタ１２の仮数部の値を、第１および第２レジスタ１１・１２の指数部の値の差の桁分だけ、右シフトして位を合わせる。さらに、転送制御回路２２は、両レジスタ１１・１２の仮数部同士を加算する前に、第１レジスタ１１の仮数部の最下位桁に、丸め処理用の値（２進演算の場合は”１”）を格納し、演算回路２１は、その後に、両レジスタ１１・１２の仮数部同士を加算して、演算結果の仮数部を求める。【選択図】  図１
2005128907.tif 000002
【特許請求の範囲】
【請求項１】
仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置の制御方法であって、
加算または減算のための２つのオペランドが与えられた場合に、上記複数のレジスタの２つへ、それぞれの仮数部の最下位の桁の値が０になり、残余の値が、それぞれに対応するオペランドとなるように、上記制御回路が、上記各レジスタへオペランドを書き込む書き込み工程と、
上記各オペランドを格納したレジスタのうち、両者の指数部の値が異なる場合は、大きい方を第１レジスタ、両者の指数部の値が同じ場合は、これらのレジスタの一方を第１レジスタとし、上記各オペランドを格納したレジスタのうち、上記第１レジスタではない方を第２レジスタとするとき、上記演算回路が上記第２レジスタの仮数部の値を、両者の指数部の差の桁分だけ右シフトして、上記複数のレジスタのいずれかへ格納する位合わせ工程と、
上記第１レジスタの仮数部の値と、上記位合わせ工程にて、シフト結果が格納されたレジスタの仮数部の値との加算結果または減算結果を算出して、演算結果の仮数部を求める演算工程と、
当該演算工程よりも前に実施され、上記制御回路が、上記第１レジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定する設定工程とを含んでいることを特徴とする演算装置の制御方法。
【請求項２】
仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置であって、
上記制御回路は、加算または減算のための２つのオペランドが与えられた場合に、上記複数のレジスタの２つへ、それぞれの仮数部の最下位の桁の値が０になり、残余の値が、それぞれに対応するオペランドとなるように、上記各レジスタへオペランドを書き込むものであり、
上記演算回路は、上記各オペランドを格納したレジスタのうち、両者の指数部の値が異なる場合は、大きい方を第１レジスタ、両者の指数部の値が同じ場合は、これらのレジスタの一方を第１レジスタとし、上記各オペランドを格納したレジスタのうち、上記第１レジスタではない方を第２レジスタとするとき、上記第２レジスタの仮数部の値を、両者の指数部の差の桁分だけ右シフトして、上記複数のレジスタのいずれかへ格納すると共に、上記第１レジスタの仮数部の値と、当該シフト結果が格納されたレジスタの仮数部の値との加算結果または減算結果を算出して、演算結果の仮数部を求めるものであり、
さらに、上記制御回路は、上記演算回路が演算結果の仮数部を求める前に、上記第１レジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定するものであることを特徴とする演算装置。
【請求項３】
仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有するコンピュータに、請求項１記載の各工程を実行させるプログラム。
【請求項４】
仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、上記オペランドを記憶可能な特定のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置の制御方法であって、
乗算のための２つのオペランドが与えられた場合に、上記複数のレジスタの１つへ、それぞれの仮数部の最下位の桁の値が０になり、残余が、上記オペランドの一方となるように、上記制御回路が、当該レジスタへ当該オペランドを書き込むと共に、上記特定のレジスタへ、上記オペランドの他方を書き込む書き込み工程と、
上記制御回路が、上記特定のレジスタの仮数部の各桁の値を、最下位の桁から順に取得する取得工程と、
上記取得工程にして取得される各桁に対応して行われ、上記演算回路が、上記制御回路の指示に応じて、上記複数のレジスタのうち、現在の演算結果が格納されているレジスタの仮数部の値へ、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の値を、上記対応する桁の値の回数だけ加算し、加算結果を上記複数のレジスタの１つへ書き込む加算工程と、
上記取得工程にして取得される各桁に対応して行われ、上記演算回路が、同じ桁に対応する上記加算工程にて加算結果が書き込まれたレジスタの仮数部の値を、１桁右シフトして、当該シフト結果を、新たな演算結果として、上記複数のレジスタの１つへ書き込むシフト工程と、
上記各加算工程のうち、最後の加算工程の前に実施され、上記制御回路が、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定する設定工程とを含んでいることを特徴とする演算装置の制御方法。
【請求項５】
仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、上記オペランドを記憶可能な特定のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置であって、
上記制御回路は、乗算のための２つのオペランドが与えられた場合に、上記複数のレジスタの１つへ、それぞれの仮数部の最下位の桁の値が０になり、残余が、上記オペランドの一方となるように、当該レジスタへ当該オペランドを書き込むと共に、上記特定のレジスタへ、上記オペランドの他方を書き込むと共に、上記特定のレジスタの仮数部の各桁の値を、最下位の桁から順に取得するものであり、
上記演算回路は、上記制御回路の指示に基づき、上記制御回路の取得した各桁について、上記複数のレジスタのうち、現在の演算結果が格納されているレジスタの仮数部の値へ、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の値を、上記対応する桁の値の回数だけ加算し、加算結果を上記複数のレジスタの１つへ書き込むと共に、当該レジスタの仮数部の値を、１桁右シフトして、当該シフト結果を、新たな演算結果として、上記複数のレジスタの１つへ書き込むものであり、
上記制御回路は、さらに、上記演算回路による最後の加算の前に、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定するものであることを特徴とする演算装置。
【請求項６】
仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、上記オペランドを記憶可能な特定のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有するコンピュータに、請求項４記載の各工程を実行させるプログラム。
【請求項７】
仮数部および指数部を含む浮動小数点数として与えられるオペランドを記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置の制御方法であって、
除算のための２つのオペランドが与えられた場合に、上記制御回路が、上記複数のレジスタの２つへ、それぞれに対応するオペランドを書き込む書き込み工程と、
上記複数のレジスタのうち、上記オペランドのうちの被序数が格納されたレジスタを被序数レジスタ、上記オペランドのうちの序数が格納されたレジスタを序数レジスタ、演算結果が格納されるレジスタを演算結果レジスタとするとき、上記演算回路が、上記被序数レジスタの仮数部の値を、当該仮数部の桁数の回数だけ、１桁ずつ右シフトしながら、当該被序数レジスタの仮数部の値から上記序数レジスタの仮数部の値を何回減算できるかを判定することによって、演算結果の各桁を求め、それぞれを、上記演算結果レジスタの仮数部の対応する桁へ格納する演算工程と、
上記演算回路が、上記仮数部の桁数の回数だけ右シフトされた後の被序数レジスタの仮数部の値から、上記序数レジスタの仮数部の値を、丸め処理のために予め定められた回数、減算できた場合は、上記演算結果レジスタの仮数部を１増加させる丸め処理工程とを含んでいることを特徴とする演算装置の制御方法。
【請求項８】
仮数部および指数部を含む浮動小数点数として与えられるオペランドを記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置であって、
上記制御回路は、除算のための２つのオペランドが与えられた場合に、上記制御回路が、上記複数のレジスタの２つへ、それぞれに対応するオペランドを書き込むものであり、
上記演算回路は、上記複数のレジスタのうち、上記オペランドのうちの被序数が格納されたレジスタを被序数レジスタ、上記オペランドのうちの序数が格納されたレジスタを序数レジスタ、演算結果が格納されるレジスタを演算結果レジスタとするとき、上記被序数レジスタの仮数部の値を、当該仮数部の桁数の回数だけ、１桁ずつ右シフトしながら、当該被序数レジスタの仮数部の値から上記序数レジスタの仮数部の値を何回減算できるかを判定することによって、演算結果の各桁を求め、それぞれを、上記演算結果レジスタの仮数部の対応する桁へ格納すると共に、上記仮数部の桁数の回数だけ右シフトされた後の被序数レジスタの仮数部の値から、上記序数レジスタの仮数部の値を、丸め処理のために予め定められた回数、減算できた場合は、上記演算結果レジスタの仮数部を１増加させるものであることを特徴とする演算装置。
【請求項９】
仮数部および指数部を含む浮動小数点数として与えられるオペランドを記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有するコンピュータに、請求項７記載の各工程を実行させるプログラム。
【請求項１０】
請求項３、６または９記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点数を演算する際、正しく丸められた演算結果を、全体として、より短い時間で得る演算装置の制御方法、演算装置、並びに、そのプログラムおよび記録媒体に関するものである。
【背景技術】
【０００２】
従来から、floating 演算や、電卓のような簡易小数点付き演算のように、浮動小数点数を演算する際、演算精度を向上させたり、２進数と１０進数との見かけ上の違いを補正したりするために、例えば、後述の特許文献１のように、演算結果として必要な桁数よりも１桁以上余分に演算し、演算の後で、当該値が、予め定められた数（２進演算の場合は、”１”、１０進演算の場合は、”５”）を超えているか否かを判定し、超えている場合は、その上の桁を１増加させる処理（丸め処理）が広く行われている。
【特許文献１】特開２０００−１７４６２４号公報（公開日：2000年６月２３日）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記従来の構成では、１桁以上余分に演算した後で、丸め処理を行っているため、演算に時間がかかるという問題を生じる。
【０００４】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、正しく丸められた演算結果を、全体として、より短い時間で得ることが可能な演算装置の制御方法および演算装置を実現することにある。
【課題を解決するための手段】
【０００５】
本発明に係る演算装置の制御方法は、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置の制御方法であって、加算または減算のための２つのオペランドが与えられた場合に、上記複数のレジスタの２つへ、それぞれの仮数部の最下位の桁の値が０になり、残余の値が、それぞれに対応するオペランドとなるように、上記制御回路が、上記各レジスタへオペランドを書き込む書き込み工程と、上記各オペランドを格納したレジスタのうち、両者の指数部の値が異なる場合は、大きい方を第１レジスタ、両者の指数部の値が同じ場合は、これらのレジスタの一方を第１レジスタとし、上記各オペランドを格納したレジスタのうち、上記第１レジスタではない方を第２レジスタとするとき、上記演算回路が上記第２レジスタの仮数部の値を、両者の指数部の差の桁分だけ右シフトして、上記複数のレジスタのいずれかへ格納する位合わせ工程と、上記第１レジスタの仮数部の値と、上記位合わせ工程にて、シフト結果が格納されたレジスタの仮数部の値との加算結果または減算結果を算出して、演算結果の仮数部を求める演算工程と、当該演算工程よりも前に実施され、上記制御回路が、上記第１レジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定する設定工程とを含んでいることを特徴としている。
【０００６】
また、本発明に係る演算装置は、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置であって、上記制御回路は、加算または減算のための２つのオペランドが与えられた場合に、上記複数のレジスタの２つへ、それぞれの仮数部の最下位の桁の値が０になり、残余の値が、それぞれに対応するオペランドとなるように、上記各レジスタへオペランドを書き込むものであり、上記演算回路は、上記各オペランドを格納したレジスタのうち、両者の指数部の値が異なる場合は、大きい方を第１レジスタ、両者の指数部の値が同じ場合は、これらのレジスタの一方を第１レジスタとし、上記各オペランドを格納したレジスタのうち、上記第１レジスタではない方を第２レジスタとするとき、上記第２レジスタの仮数部の値を、両者の指数部の差の桁分だけ右シフトして、上記複数のレジスタのいずれかへ格納すると共に、上記第１レジスタの仮数部の値と、当該シフト結果が格納されたレジスタの仮数部の値との加算結果または減算結果を算出して、演算結果の仮数部を求めるものであり、さらに、上記制御回路は、上記演算回路が演算結果の仮数部を求める前に、上記第１レジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定するものであることを特徴としている。
【０００７】
さらに、本発明に係るプログラムは、仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有するコンピュータに、上記書き込み工程、位合わせ工程、演算工程および設定工程を実行させるプログラムである。
【０００８】
一方、本発明に係る演算装置の制御方法は、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、上記オペランドを記憶可能な特定のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置の制御方法であって、乗算のための２つのオペランドが与えられた場合に、上記複数のレジスタの１つへ、それぞれの仮数部の最下位の桁の値が０になり、残余が、上記オペランドの一方となるように、上記制御回路が、当該レジスタへ当該オペランドを書き込むと共に、上記特定のレジスタへ、上記オペランドの他方を書き込む書き込み工程と、上記制御回路が、上記特定のレジスタの仮数部の各桁の値を、最下位の桁から順に取得する取得工程と、上記取得工程にして取得される各桁に対応して行われ、上記演算回路が、上記制御回路の指示に応じて、上記複数のレジスタのうち、現在の演算結果が格納されているレジスタの仮数部の値へ、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の値を、上記対応する桁の値の回数だけ加算し、加算結果を上記複数のレジスタの１つへ書き込む加算工程と、上記取得工程にして取得される各桁に対応して行われ、上記演算回路が、同じ桁に対応する上記加算工程にて加算結果が書き込まれたレジスタの仮数部の値を、１桁右シフトして、当該シフト結果を、新たな演算結果として、上記複数のレジスタの１つへ書き込むシフト工程と、上記各加算工程のうち、最後の加算工程の前に実施され、上記制御回路が、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定する設定工程とを含んでいることを特徴としている。
【０００９】
また、本発明に係る演算装置は、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、上記オペランドを記憶可能な特定のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置であって、上記制御回路は、乗算のための２つのオペランドが与えられた場合に、上記複数のレジスタの１つへ、それぞれの仮数部の最下位の桁の値が０になり、残余が、上記オペランドの一方となるように、当該レジスタへ当該オペランドを書き込むと共に、上記特定のレジスタへ、上記オペランドの他方を書き込むと共に、上記特定のレジスタの仮数部の各桁の値を、最下位の桁から順に取得するものであり、上記演算回路は、上記制御回路の指示に基づき、上記制御回路の取得した各桁について、上記複数のレジスタのうち、現在の演算結果が格納されているレジスタの仮数部の値へ、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の値を、上記対応する桁の値の回数だけ加算し、加算結果を上記複数のレジスタの１つへ書き込むと共に、当該レジスタの仮数部の値を、１桁右シフトして、当該シフト結果を、新たな演算結果として、上記複数のレジスタの１つへ書き込むものであり、上記制御回路は、さらに、上記演算回路による最後の加算の前に、上記複数のレジスタのうち、オペランドが書き込まれたレジスタの仮数部の最下位桁へ、丸め処理のために予め定められた数を設定するものであることを特徴としている。
【００１０】
さらに、本発明に係るプログラムは、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶可能な複数のレジスタと、上記オペランドを記憶可能な特定のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有するコンピュータに、上記書き込み工程、取得工程、加算工程、シフト工程および設定工程を実行させることを特徴としている。
【００１１】
一方、本発明に係る演算装置の制御方法は、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドを記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置の制御方法であって、除算のための２つのオペランドが与えられた場合に、上記制御回路が、上記複数のレジスタの２つへ、それぞれに対応するオペランドを書き込む書き込み工程と、上記複数のレジスタのうち、上記オペランドのうちの被序数が格納されたレジスタを被序数レジスタ、上記オペランドのうちの序数が格納されたレジスタを序数レジスタ、演算結果が格納されるレジスタを演算結果レジスタとするとき、上記演算回路が、上記被序数レジスタの仮数部の値を、当該仮数部の桁数の回数だけ、１桁ずつ右シフトしながら、当該被序数レジスタの仮数部の値から上記序数レジスタの仮数部の値を何回減算できるかを判定することによって、演算結果の各桁を求め、それぞれを、上記演算結果レジスタの仮数部の対応する桁へ格納する演算工程と、上記演算回路が、上記仮数部の桁数の回数だけ右シフトされた後の被序数レジスタの仮数部の値から、上記序数レジスタの仮数部の値を、丸め処理のために予め定められた回数、減算できた場合は、上記演算結果レジスタの仮数部を１増加させる丸め処理工程とを含んでいることを特徴としている。
【００１２】
また、本発明に係る演算装置は、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドを記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有する演算装置であって、上記制御回路は、除算のための２つのオペランドが与えられた場合に、上記制御回路が、上記複数のレジスタの２つへ、それぞれに対応するオペランドを書き込むものであり、上記演算回路は、上記複数のレジスタのうち、上記オペランドのうちの被序数が格納されたレジスタを被序数レジスタ、上記オペランドのうちの序数が格納されたレジスタを序数レジスタ、演算結果が格納されるレジスタを演算結果レジスタとするとき、上記被序数レジスタの仮数部の値を、当該仮数部の桁数の回数だけ、１桁ずつ右シフトしながら、当該被序数レジスタの仮数部の値から上記序数レジスタの仮数部の値を何回減算できるかを判定することによって、演算結果の各桁を求め、それぞれを、上記演算結果レジスタの仮数部の対応する桁へ格納すると共に、上記仮数部の桁数の回数だけ右シフトされた後の被序数レジスタの仮数部の値から、上記序数レジスタの仮数部の値を、丸め処理のために予め定められた回数、減算できた場合は、上記演算結果レジスタの仮数部を１増加させるものであることを特徴としている。
【００１３】
さらに、本発明に係るプログラムは、上記課題を解決するために、仮数部および指数部を含む浮動小数点数として与えられるオペランドを記憶可能な複数のレジスタと、当該各レジスタの値を参照して演算する演算回路と、上記各レジスタおよび演算回路を制御する制御回路とを有するコンピュータに、書き込み工程、演算工程および丸め処理工程を実行させることを特徴としている。
【００１４】
また、本発明に係る記録媒体は、上記課題を解決するために、上記各プログラムのいずれかが記録されていることを特徴としている。
【発明の効果】
【００１５】
本発明に係る演算装置の制御方法および演算装置は、以上のように、演算回路が演算結果の仮数部を求める前に、制御回路が第１レジスタの仮数部の最下位桁に、丸め処理のために予め定められた数を設定している。
【００１６】
なお、当該構成および以降の構成において、丸め処理用の数は、演算の基数から、丸め処理によって繰り上げられる数の中の最小値を引いた数であり、例えば、２進演算する場合は、”１”、１０進演算する場合は、”５”である。また、第２レジスタと、シフト結果が格納されたレジスタとは、同じレジスタであってもよいし、異なるレジスタであってもよいが、同じレジスタの場合は、演算装置に必要なレジスタの数を削減できる。さらに、当該構成および以降の構成において、右シフトは、より小さな桁へのシフトを意味している。
【００１７】
ここで、上記第１レジスタは、オペランドよりも仮数部の桁数が１桁大きな浮動小数点数を記憶でき、しかも、上記各オペランドを格納したレジスタのうち、両者の指数部の値が異なる場合は、大きい方、あるいは、両者の指数部の値が同じ場合は、これらのレジスタの一方である。したがって、第１レジスタの仮数部の最下位桁は、丸め処理のための数を設定しなければ、必ず”０”になっている。
【００１８】
上記構成では、この最下位桁に、丸め処理用の数を設定した後で、演算しているので、演算した後に、丸め処理を行う従来の構成とは異なり、演算の後の繰り上げ処理をすることなく、正しく丸められた演算結果を得ることができる。
【００１９】
さらに、当該構成では、上記従来の構成と比較して、最下位桁の設定処理が増えている代わりに、演算後の繰り上げ処理が減っている。ここで、特定の桁の設定処理は、演算後の繰り上げ処理のように、ある桁の演算結果が他の桁の演算結果へ影響を及ぼす処理とは異なって、その桁の演算結果は、他の桁へ影響しない。したがって、より短い時間で、演算できる。この結果、正しく丸められた加算または減算結果を、全体として、より短い時間で得ることができる。
【００２０】
また、本発明に係る演算装置の制御方法および演算装置は、以上のように、オペランドの一方の仮数部の各桁について、当該桁が示す回数だけオペランドの他方を演算結果に加算すると共に演算結果を１桁右シフトすることによって、乗算結果を算出しているが、最後の加算の前の時点で、上述した演算装置の制御方法および演算装置と同様、オペランドが格納されたレジスタの仮数部の最下位桁に、丸め処理用の数を設定している。
【００２１】
なお、当該レジスタの仮数部の最下位桁も、丸め処理のための数を設定しなければ、必ず”０”になっている。また、この場合も、オペランドを格納するレジスタ、加算結果を書き込むレジスタおよび演算結果を書き込むレジスタは、常に同じレジスタであっても、各桁用の計算毎に異なるレジスタであってもよい。
【００２２】
したがって、当該演算装置の制御方法および演算装置と同様に、最後の加算の後に丸め処理する構成と比較して、正しく丸められた乗算結果を、全体として、より短い時間で得ることができる。
【００２３】
また、本発明に係る演算装置の制御方法および演算装置は、以上のように、上記演算回路が、上記仮数部の桁数の回数だけ右シフトされた後の被序数レジスタの仮数部の値から、上記序数レジスタの仮数部の値を、丸め処理のために予め定められた回数、減算できた場合は、上記演算結果レジスタの仮数部を１増加させている。
【００２４】
なお、除算の場合は、加減算および乗算の場合と異なり、丸め処理のために予め定められた回数は、丸め処理によって繰り上げられる数の中の最小値（しきい値）であり、例えば、２進演算する場合は、”１”、１０進演算する場合は、”５”である。また、この場合も、被序数レジスタ、序数レジスタおよび演算結果レジスタは、常に同じレジスタであってもよいし、例えば、シフト毎になど、各時点で異なるレジスタを用いてもよい。
【００２５】
したがって、従来の構成のように、演算結果レジスタにおいて、必要な桁よりも１桁下の値を求め、その後で、当該値が、しきい値を超えているか否かによって繰り上げの要否を判定し、必要な場合は、繰り上げのための演算を行う構成と比較して、必要な桁よりも１桁下の値をレジスタへ設定する処理や減算回数を削減できると共に、演算結果レジスタの仮数部に必要な桁数を削減できる。この結果、正しく丸められた除算結果を、全体として、より短い時間で得ることができる。
【００２６】
ここで、上記演算装置は、ハードウェアのみによって実現されていてもよいが、ソフトウェアを用いて実現してもよい。具体的には、本発明に係る各プログラムを上記各コンピュータによって実行させることによって、あるいは、本発明に係る記録媒体に記録された各プログラムを上記コンピュータに読み取らせて実行させることによって、当該コンピュータを上記各演算装置として動作させることができる。したがって、上記各演算装置と同様に、正しく丸められた演算結果を、全体として、より短い時間で得ることができる。
【発明を実施するための最良の形態】
【００２７】
〔第１の実施形態〕
本発明の一実施形態について図１ないし図８に基づいて説明すると以下の通りである。すなわち、本実施形態に係る演算装置の制御方法は、少数部分を持つ数値を演算する際に、丸め処理をしているにも拘わらず、演算後に丸め処理をする場合よりも高速に演算可能な方法であって、例えば、電卓で使用される簡易小数点付きの演算や、浮動小数点数の演算に好適に用いることができる。
【００２８】
具体的には、本実施形態に係る演算装置１は、浮動小数点の加算または減算を行う装置であって、図１に示すように、予め定められた桁数の、浮動小数点表示された数を記憶する第１および第２レジスタ１１・１２と、指示に応じて、上記各レジスタ１１・１２の値を参照して演算を行うと共に、指示に応じて、演算結果を上記各レジスタ１１・１２へ書き込み可能な演算回路２１と、上記各レジスタ１１・１２への、あるいは、上記各レジスタからのデータ転送を制御する転送制御回路２２と、予め定められたアルゴリズムに従って、上記各レジスタ１１・１２並びに演算回路２１および転送制御回路２２を制御する制御回路２３とを備えている。
【００２９】
本実施形態の演算装置１が演算する浮動小数点表示された数（浮動小数点数）は、ｎおよびｍを予め定められた自然数とするとき、図２に示すように、例えば、１ビットで表現される符号と、ｍ桁の指数部と、ｎ桁の仮数部とを含んでいる。なお、本実施形態に係る浮動小数点数では、仮数部の値は、絶対値で表現されている。さらに、上記両レジスタ１１・１２は、丸め処理のために、図２に示す浮動小数点数の仮数部に、その最下位の桁よりも１つ下の桁を追加した浮動小数点数を記憶できるように構成されており、図３に示すように、符号を記憶する領域ＡＳ、ｍ桁の指数部を記憶する領域ＡＥ、および、ｎ＋１桁の仮数部を記憶する領域ＡＭとを備えている。
【００３０】
一方、本実施形態に係る演算回路２１は、例えば、ＡＬＵ（数値演算ユニット：Arithmetic Logical Unit）のように、組み合わせ論理回路および順序論理回路などの論理回路によって実現されており、以下の演算処理、すなわち、仮数部の加算および減算、絶対値の比較、符号の比較、指数部の値の差の算出および桁シフト（右）が可能なように構成されている。
【００３１】
より詳細には、演算回路２１は、制御回路２３から仮数部の加算が指示された場合、指示された２つのレジスタ（本実施形態では、第１および第２レジスタ１１・１２）の仮数部の領域ＡＭから読み出された値同士を加算し、加算結果を、指示されたレジスタ（例えば、第１レジスタ１１）の仮数部の領域ＡＭへ格納できる。同様に、制御回路２３から仮数部の減算が指示された場合、指示されたレジスタ（例えば、第１レジスタ１１）の仮数部の領域ＡＭより読み出された値から、指示されたレジスタ（例えば、第２レジスタ１２）の仮数部の領域ＡＭより読み出された値を減算すると共に、減算結果を、指示されたレジスタ（例えば、第１レジスタ１１）の仮数部の領域ＡＭへ格納できる。
【００３２】
また、演算回路２１は、制御回路２３から絶対値の比較が指示された場合、指示された２つのレジスタの領域ＡＥおよびＡＭから、それぞれ出力された浮動小数点数の絶対値同士を比較して、制御回路２３へ比較結果を伝えることができる。同様に、制御回路２３から符号の比較が指示された場合、演算回路２１は、指示された２つのレジスタの領域ＡＳから、それぞれ出力された浮動小数点数の符号同士を比較して、制御回路２３へ比較結果を伝えることができる。
【００３３】
さらに、演算回路２１は、指数部の値の差の算出が制御回路２３から指示された場合、指示された２つのレジスタの指数部の領域ＡＥから読み出された値の差を算出し、算出結果を制御回路２３へ出力できる。また、制御回路２３が仮数部の右シフトを指示した場合、演算回路２１は、上記各レジスタ１１・１２のうち、指示されたレジスタ（例えば、第２レジスタ１２）の仮数部の領域ＡＭから読み出された値を、指示された桁だけ、右シフトすると共に、シフト後の値を、当該レジスタの仮数部の領域ＡＭに書き込むことができる。なお、この右シフトは、算術的な右シフトであり、シフトの結果、新たに挿入される上位桁の値は、”０”に設定されている。
【００３４】
また、本実施形態に係る転送制御回路２２は、例えば、論理回路によって構成された回路であって、制御回路２３の指示に応じて、レジスタ間の値の交換、および、仮数部の最下位桁の値の設定が可能なように構成されている。
【００３５】
より詳細には、転送制御回路２２は、制御回路２３から内容の交換指示を受け取った場合、演算回路２１は、指示された２つのレジスタの値を交換できる。例えば、本実施形態では、第１レジスタ１１から出力された値を第２レジスタ１２へ書き込むと共に、第２レジスタ１２から出力された値を第１レジスタ１１へ書き込むことができる。
【００３６】
さらに、転送制御回路２２は、制御回路２３から最下位桁の設定が指示された場合、指示されたレジスタ（例えば、第１レジスタ１１）の最下位桁（ｎ＋１番目の桁）の記憶領域へ、指示された値を書き込むことができる。
【００３７】
ここで、上記最下位の桁の設定処理は、加算または減算処理のように、桁上げまたは上の桁からの借りが発生する可能性があるために、ある桁での演算結果が他の桁の演算に影響する処理とは異なって、その桁（最下位の桁）の処理のみで処理が終了する。したがって、本実施形態に係る転送制御回路２２は、上記演算回路２１による加算処理および減算処理よりも短い時間で、最下位の桁を設定できる。
【００３８】
また、制御回路２３は、例えば、演算回路２１または転送制御回路２２へ処理を特定する命令コードを示す制御信号を与えるなどして、演算回路２１および転送制御回路２２へ、実施すべき処理を示す制御信号を印加して、それぞれを制御できる。さらに、制御回路２３は、予め定められた順序で、各レジスタ１１・１２、演算回路２１および転送制御回路２２を制御するだけではなく、予め定められたアルゴリズムに従って、演算回路２１の演算結果のうち、比較結果および指数部の値の差を受け取って、それに応じて、それ以降における、各レジスタ１１・１２、演算回路２１および転送制御回路２２の制御を変更できる。なお、上記アルゴリズムの詳細については、演算装置１の全体の動作と合わせて後述する。
【００３９】
上記制御回路２３は、例えば、当該アルゴリズムで、各レジスタ１１・１２、演算回路２１および転送制御回路２２を制御できれば、予め定められたタイミングおよび順序で、それぞれへ、それぞれの制御信号を出力すると共に、予め定められたタイミングで、演算回路２１の出力を読み出して、上記制御信号を与えるか否か、並びに、上記制御信号印加のタイミングおよび順序を変更する論理回路によって実現してもよい。また、例えば、ＣＰＵなどの演算手段が、ＲＯＭやＲＡＭなどの記憶手段に格納されたプログラムを実行し、上記各レジスタ１１・１２、演算回路２１および転送制御回路２２を制御することによって実現してもよい。この場合は、これらの手段を有する１または複数のコンピュータが、上記プログラムを記録した記録媒体（例えば、ＣＤ−ＲＯＭなど）を読み取り、当該プログラムを実行するだけで、本実施形態に係る演算装置１を実現できる。
【００４０】
また、上記演算装置１には、演算の対象となるオペランドを記憶すると共に、演算結果が書き込まれるメモリ３１も設けられており、上記転送制御回路２２は、制御回路２３の指示に応じて、メモリ３１から読み出したオペランドを、指示されたレジスタ（例えば、両レジスタ１１・１２）へ格納したり、制御回路２３の指示に基づいて、指示されたレジスタ（例えば、第１レジスタ１１）に格納された演算結果を、例えば、演算結果の表示処理など、後の処理で利用するために、メモリ３１へ格納したりすることができる。
【００４１】
上記構成において、例えば、メモリ３１の予め定められた記憶領域へ２つのオペランドが格納され、制御回路２３の予め定められたアドレスへ加算開始の指示を示す命令が書き込まれるなどして、演算装置１へ加算（Ｘ＋Ｙ）が指示されると、図４に示すステップ１（以下では、Ｓ１のように略称する）において、制御回路２３は、転送制御回路２２へ指示して、演算の対象となる上記両オペランドＸおよびＹを両レジスタ１１・１２へ格納させる。なお、以下では、指示されたときの両オペランドの順番に拘わらず、第１レジスタ１１に格納されたオペランドをＸ、第２レジスタ１２に格納されたオペランドをＹと称する。
【００４２】
ここで、上記図２に示すように、両オペランドを示す浮動小数点数は、符号を除いて、ｍ＋ｎ桁であるのに対して、上記図３に示すように、両レジスタ１１・１２には、丸め処理用の桁が追加されているので、それらの桁数は、符号を除いて、ｍ＋ｎ＋１桁である。このように、オペランドの桁（符号を除く）の方が両レジスタ１１・１２に記憶可能な浮動小数点数の桁（符号を除く）よりも少ないが、上記Ｓ１において、上記転送制御回路２２は、制御回路２３の指示に応じ、両レジスタ１１・１２にオペランドＸおよびＹを格納する際、両レジスタ１１・１２の最下位の桁に”０”を設定している。
【００４３】
上記Ｓ１において、両レジスタ１１・１２にオペランドが格納されると、制御回路２３は、Ｓ２において、両レジスタ１１・１２の絶対値の比較を演算回路２１へ指示し、比較結果を受け取る。第１レジスタ１１に格納された浮動小数点数Ｘの絶対値の方が第２レジスタ１２に格納された浮動小数点数Ｙの絶対値よりも小さいことを、上記比較結果が示している場合、制御回路２３は、Ｓ３において、演算回路２１へ指示して、両レジスタ１１および１２に格納されている浮動小数点数ＸおよびＹを交換した後、Ｓ４以降の処理を行う。一方、上記Ｓ２にて、浮動小数点数Ｘの絶対値の方が大きいか同じと判定した場合は、上記Ｓ３を実施せずに、Ｓ４以降の処理を行う。
【００４４】
すなわち、Ｓ４において、制御回路２３は、演算回路２１へ両レジスタ１１・１２の指数部の値の差の算出を指示し、演算結果を受け取ると共に、さらに、演算結果の示す桁分だけ（差の桁分だけ）、第２レジスタ１２の仮数部（Ｙの仮数部）を右シフトするように指示し、演算結果を第２レジスタ１２の仮数部に書き込ませる。これにより、第２レジスタ１２の仮数部の位が第１レジスタ１１の仮数部の桁（指数部の値）に合わせられ、それぞれの仮数部は、指数部の値を、第１レジスタ１１の指数部の値に揃えて浮動小数点表記したときの値になる。
【００４５】
なお、この状態における第２レジスタ１２の仮数部の最下位の桁（ｎ＋１番目の桁）の値は、演算装置１へ指示されたオペランドのうち、指数部の値が小さかった方のオペランドの値に応じて設定されている。一方、第１レジスタ１１の仮数部の最下位の桁の値は、”０”である。
【００４６】
本実施形態に係る制御回路２３は、さらに、Ｓ５において、仮数部の加算または減算処理よりも前に、転送制御回路２２へ指示して、第１レジスタ１１の最下位の桁（Ｘの最下位の桁）に、丸め用の値として予め設定された値を設定させる。なお、丸め用の値は、丸め処理によって繰り上がりが発生する値のうちの最小値であり、例えば、浮動小数点数が２進数で表記されている場合は、”１”、１０進数で表記されている場合は、”５”である。
【００４７】
さらに、上記Ｓ５にて丸め用の値が設定された後、制御回路２３は、演算回路２１へ対して、両レジスタ１１・１２の符号の領域ＡＳも考慮して、両レジスタ１１および１２の仮数部の領域ＡＭの値を加算させ、加算結果を、第１レジスタ１１の仮数部の領域ＡＭに格納させる（Ｓ６）。具体的には、制御回路２３は、両レジスタ１１・１２の符号の領域ＡＳの値に応じ、加算または減算を指示している。より詳細には、制御回路２３は、演算回路２１へ両レジスタ１１・１２の符号の比較を指示すると共に、演算回路２１からの比較結果が、両者の符号同士の一致を示している場合、演算回路２１へ加算を指示する。一方、不一致を示している場合、制御回路２３は、演算回路２１へ指示して、第１レジスタ１１の仮数部から第２レジスタ１２の仮数部を減算させる。なお、いずれの場合であっても、演算結果は、第１レジスタ１１の仮数部の領域ＡＭに格納される。ここで、上記Ｓ２およびＳ３において、絶対値の大きい方が第１レジスタ１１に格納されているため、両レジスタ１１・１２に格納されている値に拘わらず、第１レジスタ１１の符号の領域ＡＳの値の変更は不要である。
【００４８】
上記Ｓ６にて、第１レジスタ１１の仮数部（Ｘの仮数部）に、両レジスタ１１・１２の仮数部（ＸおよびＹの仮数部）の加算結果が書き込まれ、演算が終了すると、制御回路２３は、Ｓ７において、演算結果を出力するために、転送制御回路２２へ指示して、第１レジスタ１１に格納された浮動小数点数Ｘを、メモリ３１へ格納させる。ここで、上述したように、演算結果としての浮動小数点数の桁数（符号を除く）は、第１レジスタ１１の桁数（符号を除く）よりも１桁小さいので、転送制御回路２２は、第１レジスタ１１の仮数部の最下位の桁を除いた部分をメモリ３１へ格納する。
【００４９】
上記構成では、上記Ｓ６にて加算処理を行う前に、上記Ｓ５において、本来０であるべき、第１レジスタ１１の仮数部の最下位の桁を、丸め用の値に設定している。したがって、加算処理の後に、最下位の桁が丸め用の値以上であれば、最下位の１桁上の値（加算結果としての浮動小数点数の最下位の桁）に１を加算する場合と同様に、正しい丸め処理結果を得ることができる。
【００５０】
さらに、正しい丸め処理結果が得られているにも拘わらず、加算後に丸め処理する場合とは異なり、加算後の比較処理および１を加算する処理が不要である。ここで、本実施形態に係る加算方法では、加算後の比較処理および１を加算する処理に代えて、Ｓ５において、丸め用の値の設定処理が付加されているが、当該設定処理は、加算処理のように、ある桁での演算結果が他の桁の値へ影響を及ぼす処理とは異なり、他の桁の値には影響を及ぼさず、最下位の桁の設定だけで終了している。したがって、より短い時間で、演算することができる。したがって、全体で見ると、加算後に丸め処理を行う方法と比較して、より短い時間で、正しく丸められた加算結果を得ることができる。
【００５１】
ところで、上記では、演算装置１に加算が指示された場合を例にして説明したが、減算（Ｘ−Ｙ）が指示された場合には、上記演算装置１によって図５に示す処理が行われる。すなわち、図５では、Ｓ６の加算処理の代わりに、両レジスタ１１・１２に格納された浮動小数点数の符号も考慮して減算処理を行うステップ（Ｓ６ａ）が設けられており、当該ステップにおいて、制御回路２３は、演算回路２１へ対して、両レジスタ１１・１２の符号の領域ＡＳの値に応じ、加算または減算を指示し、演算結果を、第１レジスタ１１の仮数部の領域ＡＭへ格納させる。より詳細には、制御回路２３は、演算回路２１へ両レジスタ１１・１２の符号の比較を指示し、演算回路２１からの比較結果が両者の符合の不一致を示している場合、制御回路２３は、演算回路２１へ、加算の代わりに減算を指示し、一致を示している場合、演算回路２１へ、減算の代わりに加算を指示する。これにより、加算の場合と同様に、全体で見ると、減算後に丸め処理を行う方法と比較して、より短い時間で、正しく丸められた減算結果を得ることができる。
【００５２】
なお、上記では、仮数部が絶対値で表記される場合を例にして説明したが、制御回路２３の指示に従う演算回路２１が、両レジスタ１１・１２の値の符号も考慮して加算または減算できれば、補数表記される場合であっても、何ら支障なく、加算または演算でき、演算結果を第１レジスタ１１に格納できる。
【００５３】
〔第２の実施形態〕
ところで、上記第１の実施形態では、浮動小数点数を加算または減算する場合について説明したが、乗算の場合であっても、桁のシフトおよび加算を繰り返して乗算結果を得る場合には、最後の加算の前に、丸め用の値を設定することによって、同様の効果を得ることができる。
【００５４】
すなわち、本実施形態に係る演算装置１ｂは、図６に示すように、図１に示す演算装置１の構成と略同一であるが、仮数部の領域ＡＭの桁数がｎ桁である点を除いて、各レジスタ１１・１２と同一構成の第３レジスタ１３ｂを備えていると共に、制御回路２３が各部材１１〜１３ｂ、２１ｂおよび２２ｂを制御する際のアルゴリズムが変更されている。
【００５５】
また、本実施形態において、第１の実施形態に係る演算回路２１に代えて設けられた演算回路２１ｂは、演算回路２１が可能な演算に加えて、指数部の値同士の加算、符号同士の排他的論理和演算、および、仮数部の特定の桁のテストが可能なように構成されている。なお、加減算が不要であれば、演算回路２１とは異なり、本実施形態の動作の説明において用いなかった処理（例えば、絶対値の比較処理など）を実施できなくてもよい。
【００５６】
より詳細には、本実施形態に係る演算回路２１ｂは、制御回路２３から指数部の加算が指示された場合、指示された２つのレジスタ（例えば、第２および第３レジスタ１２・１３ｂ）の指数部の領域ＡＥから読み出された値同士を加算し、加算結果を、指示されたレジスタ（例えば、第１レジスタ１１）の指数部の領域ＡＥへ格納できる。同様に、制御回路２３から符号の排他的論理和演算が指示された場合、指示された２つのレジスタ（例えば、第２および第３レジスタ１２・１３ｂ）の符号の領域ＡＳから読み出された値同士の排他的論理和を算出し、演算結果を、指示されたレジスタ（例えば、第１レジスタ１１）の符号の領域ＡＳへ格納できる。また、演算回路２１ｂは、制御回路２３から、指定されたレジスタ（例えば、第３レジスタ１３ｂ）の指定された桁（例えば、最下位の桁）のテストが指示されると、当該桁の値を、制御回路２３へ伝えることができる。
【００５７】
さらに、本実施形態において、第１の実施形態の転送制御回路２２に代えて設けられた転送制御回路２２ｂは、転送制御回路２２が可能な処理に加えて、制御回路２３から指示されたレジスタに、”０”を示す浮動小数点数を格納できるように構成されている。
【００５８】
上記構成において、例えば、メモリ３１の予め定められた記憶領域へ２つのオペランドが格納され、制御回路２３の予め定められたアドレスへ乗算開始の指示を示す命令が書き込まれるなどして、演算装置１へ乗算（Ｙ＊Ｚ→Ｘ）が指示されると、図７に示すＳ１１において、制御回路２３は、転送制御回路２２ｂへ指示して、乗算の対象となる上記両オペランドの一方を、第２レジスタ１２へ格納させると共に、他方を第３レジスタ１３ｂへ格納させる。なお、以下では、指示されたときの両オペランドの順番に拘わらず、第２レジスタ１２に格納されたオペランドをＹ、第３レジスタ１３ｂに格納されたオペランドをＺと称する。また、転送制御回路２２ｂは、第２レジスタ１２へ格納する際、図４に示すＳ１と同様に、第２レジスタ１２の最下位の桁（Ｙの最下位の桁）に”０”を設定する。
【００５９】
上記Ｓ１１において、両レジスタ１２・１３ｂにオペランドが格納されると、制御回路２３は、Ｓ１２において、転送制御回路２２ｂへ指示して、乗算結果の格納に用いる第１レジスタ１１の浮動小数点数Ｘを”０”に設定する。
【００６０】
さらに、Ｓ１３において、制御回路２３は、演算回路２１ｂへ指示して、第２および第３レジスタ１２・１３ｂの指数部の値同士を加算させ、演算結果を、第１レジスタ１１の指数部の領域ＡＥに格納させる（Ｙの指数部＋Ｚの指数部→Ｘの指数部）。また、Ｓ１４において、制御回路２３は、演算回路２１ｂへ指示して、第２および第３レジスタ１２・１３ｂの符号の排他的論理和を算出させ、演算結果を、第１レジスタ１１の符号の領域ＡＳに格納させる（Ｙの符号 EX-OR  Ｚの符号→Ｘの符号）。
【００６１】
また、制御回路２３は、以下のＳ２１〜Ｓ２４の処理を、仮数部の桁数をｎとするとき、（ｎ−１）回繰り返す。一例として、演算回路２１ｂが２進数で演算する場合について説明すると、Ｓ２１において、制御回路２３は、演算回路２１ｂへ指示して、第３レジスタ１３ｂの最下位の桁の値（Ｚの最下位桁）を読み出させ、当該値を受け取る。値が”１”であれば（Ｓ２１にて、YES の場合）、制御回路２３は、Ｓ２２において、演算回路２１ｂへ指示して、第１レジスタ１１の仮数部の値に第２レジスタ１２の仮数部の値を加算した値を、第１レジスタ１１の仮数部の領域ＡＭに格納させた後、Ｓ２３以降の処理を実行する（Ｘの仮数部＋Ｙの仮数部→Ｘの仮数部）。一方、値が”０”であれば（Ｓ２１にて、NOの場合）、制御回路２３は、Ｓ２２の処理を行わずに、Ｓ２３以降の処理を実行する。
【００６２】
すなわち、Ｓ２３において、制御回路２３は、演算回路２１ｂへ指示して、第１レジスタ１１の仮数部の値（Ｘの仮数部）を１桁分右シフトさせる。さらに、制御回路２３は、Ｓ２４において、演算回路２１ｂへ指示して第３レジスタ１３ｂの仮数部の値（Ｚの仮数部）を１桁分右シフトさせる。
【００６３】
上記Ｓ２１〜Ｓ２４の処理が（ｎ−１）回繰り返されると、制御回路２３は、Ｓ３１において、演算回路２１ｂへ第３レジスタ１３ｂの最下位桁の値を読み出させ、当該値を受け取る。値が”０”であれば（Ｓ３１にて、NOの場合）、制御回路２３は、Ｓ３２において、転送制御回路２２ｂへ指示して、第２レジスタ１２（Ｙ）に”０”を格納した後、Ｓ５〜Ｓ７の処理を実行する。一方、値が”１”であれば（Ｓ３１にて、YES の場合）、制御回路２３は、Ｓ２２の処理を行わずに、Ｓ５〜Ｓ７の処理を実行する。
【００６４】
ここで、本実施形態のＳ５〜Ｓ７は、図４に示すＳ５〜Ｓ７と略同様であるが、Ｓ６に代えて設けられたＳ６ｂでは、Ｓ６とは異なり、符号を考慮することなく、仮数部の値同士が加算させる。具体的には、Ｓ６ｂにおいて、制御回路２３は、演算回路２１ｂへ指示して、第１レジスタ１１の仮数部の値と第２レジスタ１２の仮数部の値とを加算させ、加算結果を第１レジスタ１１の仮数部の領域ＡＭに格納させる。
【００６５】
なお、上記では、一例として、２進演算する場合を例にして説明したが、より一般的に、２以上の自然数をｘとして、ｘ進演算する場合は、上記Ｓ２１およびＳ２２の処理、すなわち、上記Ｓ２２の処理を行うか否かを最下位の桁の値に応じて決定する処理に代えて、上記Ｓ２２の処理を、第３レジスタ１３ｂの最下位桁の値の回数だけ繰り返す処理が行われる。さらに、Ｓ２４の後にも、第３レジスタ１３ｂの最下位桁の値の回数だけ、Ｓ２４と同様の処理、すなわち、第１レジスタ１１の仮数部への第２レジスタ１２の仮数部への加算処理が繰り返されると共に、最後の繰り返し時の加算処理に代えて、上記Ｓ３１〜Ｓ３２およびＳ５〜Ｓ７の処理が行われる。
【００６６】
また、上記では、Ｓ３１およびＳ３２の処理が行われる場合を例にして説明したが、第３レジスタ１３ｂに格納される浮動小数点数の表現方法が、全体が”０”である場合を除いて、最上位の桁が”０”にならないような表現方法で表現されている場合、すなわち、上記Ｓ３１の判定が常にYES になる場合は、Ｓ３１およびＳ３２の処理が不要である。この場合、上記第３レジスタ１３ｂに格納されるオペランドが”０”の場合、演算結果が”０”にならないが、制御回路２３が、Ｓ１１の後、演算回路２１ｂへ指示して、オペランドの双方、すなわち、第２レジスタ１２の最下位の桁を除く部分、および、第３レジスタ１２の値）が”０”であるか否かをテストさせ、一方が”０”であった場合は、それ以降の処理を実行せず、転送制御回路２２ｂへ指示して、演算結果として、”０”を出力させればよい。なお、両オペランドが”０”でないことの事前確認は、Ｓ３１およびＳ３２を省略するか否かに拘わらず、演算速度向上に有効である。
【００６７】
このように、本実施形態に係る演算装置１ｂは、浮動小数点数を乗算する際、桁のシフトおよび加算を繰り返して乗算結果を得ており、これら繰り返されるシフトおよび加算処理のうち、最後の加算処理の前に、丸め用の値を設定した後、最後の加算処理を行っている。したがって、第１の実施形態と同様に、全体で見ると、演算後に丸め処理を行う方法と比較して、より短い時間で、正しく丸められた乗算結果を得ることができる。
【００６８】
〔第３の実施形態〕
本実施形態では、正しく丸められた除算結果を高速に算出可能な構成について説明する。すなわち、本実施形態に係る演算装置１ｃは、被序数の右シフトと、演算結果の左シフトと、被序数と序数との比較に応じた演算結果の最下位の桁設定とを繰り返して、演算結果を算出しているが、丸め用の桁の設定処理および丸め処理に代えて、被序数と序数との比較結果に応じて上記丸め用の値の加算の要否を決定する処理を行っている。
【００６９】
具体的には、本実施形態に係る演算装置１ｃは、第２の実施形態に係る演算装置１ｂと略同様の構成であるが、第１および第２レジスタ１１・１２に代えて、第３レジスタ１３ｂと同一構成、すなわち、仮数部の桁数がｎ桁の第１および第２レジスタ１１ｂ・１２ｂが設けられている共に、制御回路２３が各部材１１ｃ〜１３ｂ、２１ｃおよび２２ｂを制御する際のアルゴリズムが変更されている。
【００７０】
また、本実施形態において、第２の実施形態に係る演算回路２１ｂに代えて設けられた演算回路２１ｃは、演算回路２１ｂが可能な演算に加えて、指数部の減算、仮数部同士の比較、仮数部の１増加、および、仮数部の桁シフト（左）が可能なように構成されている。なお、加減算および乗算が不要であれば、演算回路２１および２１ｂとは異なり、本実施形態の動作の説明において用いなかった処理（例えば、絶対値の比較処理など）を実施できなくてもよい。
【００７１】
より詳細には、本実施形態に係る演算回路２１ｃは、制御回路２３から指数部の減算が指示された場合、指示されたレジスタ（例えば、第２レジスタ１２ｃ）の指数部の領域ＡＥより読み出された値から、指示されたレジスタ（例えば、第３レジスタ１３ｂ）の指数部の領域ＡＥより読み出された値を減算し、減算結果を、指示されたレジスタ（例えば、第１レジスタ１１ｃ）の指数部の領域ＡＥへ格納できる。
【００７２】
また、制御回路２３から仮数部の比較が指示された場合、指示された２つのレジスタ（例えば、第２および第３レジスタ１２ｃ・１３ｂ）の仮数部の領域ＡＭから読み出された値同士を比較し、比較結果を、制御回路２３へ伝えることができる。さらに、制御回路２３から仮数部の１増加が指示された場合、指示されたレジスタ（例えば、第１レジスタ１１ｃ）の仮数部の値を１増加させて、当該レジスタの仮数部の領域ＡＭへ格納できる。同様に、左シフトが指示された場合、指示されたレジスタ（例えば、第１レジスタ１１ｃ）の仮数部の値を左に１桁シフトして、当該レジスタの仮数部の領域ＡＭへ、シフト結果を格納できる。なお、左シフトも、右シフトと同様に算術的な左シフトであり、シフトの結果、新たに挿入される下位桁の値は、”０”に設定されている。
【００７３】
上記構成において、例えば、メモリ３１の予め定められた記憶領域へ２つのオペランドが格納され、制御回路２３の予め定められたアドレスへ除算開始の指示を示す命令が書き込まれるなどして、演算装置１へ除算（Ｙ／Ｚ→Ｘ）が指示されると、図８に示すＳ４１において、制御回路２３は、転送制御回路２２ｂへ指示して、被序数Ｙを第２レジスタ１２ｃへ格納させると共に、序数Ｚを第３レジスタ１３ｂへ格納させる。
【００７４】
上記Ｓ４１において、両レジスタ１２ｃ・１３ｂにオペランドが格納されると、制御回路２３は、Ｓ４２において、転送制御回路２２ｂへ指示して、除算結果（商）の格納に用いる第１レジスタ１１の浮動小数点数Ｘを”０”に設定する。
【００７５】
さらに、Ｓ４３において、制御回路２３は、演算回路２１ｃへ指示して、第２レジスタ１２ｃの指数部の値から、第３レジスタ１３ｂの指数部の値を減算させ、演算結果を、第１レジスタ１１ｃの指数部の領域ＡＥに格納させる（Ｙの指数部−Ｚの指数部→Ｘの指数部）。また、Ｓ４４において、制御回路２３は、演算回路２１ｂへ指示して、第２および第３レジスタ１２ｃ・１３ｂの符号の排他的論理和を算出させ、演算結果を、第１レジスタ１１ｃの符号の領域ＡＳに格納させる（Ｙの符号 EX-OR  Ｚの符号→Ｘの符号）。
【００７６】
また、制御回路２３は、以下のＳ５１〜Ｓ５５の処理を、仮数部の桁数だけ（ｎ回だけ）繰り返す。一例として、演算回路２１ｃが２進数で演算する場合について説明すると、Ｓ５１において、制御回路２３は、演算回路２１ｃへ指示して、第２レジスタ１２ｃおよび第３レジスタ１３ｂの仮数部の値同士（Ｙの仮数部およびＺの仮数部）を比較させ、比較結果を受け取る。第２レジスタ１２ｃの仮数部の値が第３レジスタ１３ｂよりも大きいか同じ場合（上記Ｓ５１にて、Ｙ≧Ｚの場合）、制御回路２３は、演算回路２１ｃへ指示して、第２レジスタ１２ｃの仮数部の値から第３レジスタ１３ｂの仮数部の値を減算させ、減算結果を、第２レジスタ１２ｃの仮数部の領域ＡＭに格納させる（Ｙの仮数部−Ｚの仮数部→Ｙの仮数部）。さらに、制御回路２３は、Ｓ５３において、演算回路２１ｃへ指示して、第１レジスタ１１ｃの仮数部の最下位の桁（Ｘの最下位桁）に”１”を書き込んだ後、Ｓ５４以降の処理を行う。一方、第２レジスタ１２ｃの仮数部の値の方が小さい場合（上記Ｓ５１にて、Ｙ＜Ｚの場合）は、上記Ｓ５２およびＳ５３の処理を行わずに、Ｓ５４以降の処理を行う。
【００７７】
すなわち、Ｓ５４において、制御回路２３は、演算回路２１ｃへ指示して、第１レジスタ１１ｃの仮数部の値（Ｘの仮数部）を１桁左にシフトさせる。また、Ｓ５５において、制御回路２３は、演算回路２１ｃへ指示し、第２レジスタ１２ｃの仮数部の値（Ｙの仮数部）を１桁右にシフトさせ、第２レジスタ１２ｃの仮数部の領域ＡＭに格納させる。
【００７８】
上記Ｓ５１〜Ｓ５５の処理がｎ回繰り返されると、制御回路２３は、Ｓ６１において、演算回路２１ｃに、第２レジスタ１２ｃおよび第３レジスタ１３ｂの仮数部の値同士（Ｙの仮数部およびＺの仮数部）を比較させ、比較結果を受け取る。第２レジスタ１２ｃの方が大きいか同じことを比較結果が示している場合（上記Ｓ６１にて、Ｙ≧Ｚの場合）、制御回路２３は、Ｓ６２において、第１レジスタ１１ｃの仮数部の値（Ｘの仮数部）を１増加させた後、Ｓ６３以降の処理を行う。一方、第２レジスタ１２ｃの方が小さいことを比較結果が示している場合（上記Ｓ６１にて、Ｙ＜Ｚの場合）は、上記Ｓ６２の処理を行わずにＳ６３以降の処理が行われる。すなわち、制御回路２３は、Ｓ６３において、演算結果を出力するために、転送制御回路２２ｂへ指示して、第１レジスタ１１ｃに格納された浮動小数点数Ｘを、メモリ３１へ格納させる。
【００７９】
なお、上記では、一例として、２進演算する場合を例にして説明したが、より一般的にｘ進演算する場合は、上記Ｓ５１〜Ｓ５３の処理に代えて、上記Ｓ５１およびＳ５２の処理が、Ｓ５１にて、第３レジスタ１３ｂの仮数部の方が小さいと判定されるまでの間、繰り返され、その後、第１レジスタ１１ｃの最下位の桁に、繰り返し回数が書き込まれる。さらに、上記Ｓ６１およびＳ６２の処理に代えて、上記Ｓ５１およびＳ５２の処理が、第３レジスタ１３ｂの仮数部の方が小さいと判定されるか、繰り返し回数が上記丸め用の値（例えば、１０進の場合で５回）になるまでの間、繰り返される。そして、繰り返し回数が上記丸め用の値になった場合は、Ｓ６２の処理が行われた後、上記Ｓ６３の処理が行われる。一方、繰り返し回数が上記丸め用の値に達するまでに繰り返しが終了した場合は、制御回路２３は、上記Ｓ６２の処理を行わずに、上記Ｓ６３の処理を行う。
【００８０】
上記構成では、商の最下位の桁を算出した後、被序数から序数を減算可能な回数が上記丸め用の値を超えているか否かによって、商に１を加えるか否かを判定している。したがって、商の最下位ビットよりも１桁下位の値（丸め用の桁の値）を決定した後で、丸め処理を行う構成に比べて、演算に必要な桁数および演算量を削減できる。
【産業上の利用可能性】
【００８１】
本発明に係る演算装置の制御方法および演算装置は、浮動小数点数を演算する際、正しく丸められた演算結果を、全体として、より短い時間で得ることができるので、浮動小数点数を演算する用途に広く適用できる。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施形態を示すものであり、演算装置の要部構成を示すブロック図である。
【図２】演算のオペランドあるいは演算結果となる浮動小数点数を示す図面である。
【図３】上記演算装置に設けられたレジスタを示す図面である。
【図４】上記演算装置の動作を示すものであって、加算時の動作を示すフローチャートである。
【図５】上記演算装置の動作を示すものであって、減算時の動作を示すフローチャートである。
【図６】本発明の他の実施形態を示すものであって、演算装置の要部構成を示すブロック図である。
【図７】上記演算装置の動作を示すものであり、乗算時の動作を示すフローチャートである。
【図８】本発明のさらに他の実施形態を示すものであって、除算時の動作を示すフローチャートである。
【符号の説明】
【００８３】
１・１ｂ・１ｃ      演算装置
１１・１１ｃ          第１レジスタ（レジスタ；演算結果レジスタ）
１２・１２ｃ          第２レジスタ（レジスタ；被序数レジスタ）
１３ｂ                第３レジスタ（特定のレジスタ；序数レジスタ）
２１・２１ｂ・２１ｃ  演算回路
２２・２２ｂ          転送制御回路（制御回路）
２３                  制御回路
【図１】
2005128907.tif 000003
【図２】
2005128907.tif 000004
【図３】
2005128907.tif 000005
【図４】
2005128907.tif 000006
【図５】
2005128907.tif 000007
【図６】
2005128907.tif 000008
【図７】
2005128907.tif 000009
【図８】
2005128907.tif 000010