以下に、本願の開示する処理プログラム、処理装置および処理方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、本実施例に係る単精度浮動小数点数の圧縮処理を示す図である。
図1上段に示すように、IEEE754で規定される単精度浮動小数点数は、4バイトで表わされ、1ビットからなる符号部a1、8ビットからなる指数部a2および23ビットからなる仮数部a3から構成される。符号部a1は、0を正数、1を負数とする。指数部a2は、符号なしの2進整数として、単精度の場合127のゲタを履かせた表現で表わされる。仮数部a3は、整数部分以下の小数部分の値を2進数で表わされる。
例えば、10進数の数値1.1は、(−1)0(数1)*(1+0.1(数2))*2(127(数3)−127)で表わされる。(数1)には、符号部a1で表わされる値の10進表記が設定され、ここでは0が設定される。(数2)には、仮数部a3で表わされる値の10進表記が設定され、ここでは0.1が設定される。(数3)には、指数部a2で表わされる値の10進表記が設定され、ここでは127が設定される。単精度浮動小数点数は、(数1)、(数2)および(数3)の10進表記をそれぞれ符号部a1、指数部a2および仮数部a3に対して2進表記で表わす。なお、仮数部a3の最下位ビットの値は、後続するビットの値を繰り上げた状態となっている。
本実施例に係る圧縮処理では、このような単精度浮動小数点数を圧縮する。圧縮処理は、単精度浮動小数点数の数値を表すビット列の仮数部a3から循環パターンを抽出する。循環パターンとは、同じ数字の列が循環して繰り返されるパターンのことをいう。圧縮処理は、循環パターンが抽出された場合に、仮数部a3を循環パターンと循環パターンのビット数を示す循環数により規定する。圧縮処理は、規定された循環パターンおよび循環数を用いて、仮数部a3を圧縮する。
図1中段に示すように、単精度浮動小数点数は、仮数部a3が圧縮される場合、3バイトで表わされる。単精度浮動小数点数は、1ビットからなる圧縮フラグb1、1ビットからなる符号部b2、8ビットからなる指数部b3、4ビットからなる循環数部b4および10ビットからなる循環仮数部b5から構成される。図1上段に示すIEEE754で規定される単精度浮動小数点数の構成と同じ構成は、符号部b2と指数部b3である。IEEE754で規定される単精度浮動小数点数と異なる構成は、圧縮フラグb1、循環数部b4および循環仮数部b5である。
圧縮フラグb1は、圧縮されたか否かを示すフラグである。一例として、圧縮フラグb1には、圧縮された場合には1が設定され、圧縮されなかった場合には、0が設定される。循環数部b4には、循環パターンのビット数を示す循環数が設定される。循環仮数部b5は、有限仮数部b51および循環節部b52から構成される。有限仮数部b51には、仮数部a3の循環パターンが開始されるまでのビット列が設定される。循環節部b52には、循環パターンのビット列が設定される。循環節部b52には、循環数部b4に設定された循環数分の循環パターンのビット列が設定されるので、循環数部b4は、循環仮数部b5のうち循環節部b52に対応するビット列の箇所を特定するビット列であるともいえる。循環数部b4は4ビットであり、循環仮数部b5は10ビットであるので、循環数部b4は循環仮数部b5で表わす循環パターンの最大ビット数10(0b1010)を表現できる。
ここでは、圧縮処理が、仮数部a3から循環パターン「01100110」を抽出した場合の処理について説明する。圧縮処理は、符号部a1および指数部a2の値をそれぞれ符号部b2および指数部b3に設定する。圧縮処理は、循環数部b4に循環パターンのビット数である8を2進表現した「1000」を設定する。圧縮処理は、循環節部b52に循環パターンのビット列である「01100110」を設定する。圧縮処理は、有限仮数部b51に循環パターンが開始されるまでのビット列である「00」を設定する。そして、圧縮処理は、圧縮フラグb1に圧縮されることを示す「1」を設定する。これにより、圧縮処理は、単精度浮動小数点数を4バイトから3バイトに短縮することができる。
図1下段に示すように、単精度浮動小数点数は、仮数部a3が圧縮されない場合、4バイトで表わされる。単精度浮動小数点数は、1ビットからなる圧縮フラグb1、1ビットからなる符号部b2、8ビットからなる指数部b3、22ビットからなる短縮仮数部c1から構成される。図1中段に示す圧縮される場合の単精度浮動小数点数の構成と同一の構成については同一符号を示すことで、その重複する構成の説明については省略する。圧縮される場合の単精度浮動小数点数の構成と異なる構成は、短縮仮数部c1である。短縮仮数部c1は、仮数部a3の最下位ビットを落としたものである。
ここでは、圧縮処理が、仮数部a3から循環パターンを抽出しない場合の処理について説明する。圧縮処理は、符号部a1および指数部a2の値をそれぞれ符号部b2および指数部b3に設定する。圧縮処理は、仮数部a3から循環パターンを抽出しないので、短縮仮数部c1に仮数部a3の最下位ビットを落としたビット列を設定する。そして、圧縮処理は、圧縮フラグb1に圧縮されないことを示す「0」を設定する。これにより、圧縮処理は、単精度浮動小数点数を圧縮できない場合であっても、IEEE754形式を1ビット右にずらした構成であるので、IEEE754形式と互換性を保つことができる。
図2は、本実施例に係る倍精度浮動小数点数の圧縮処理を示す図である。
図2上段に示すように、IEEE754で規定される単精度浮動小数点数は、8バイトで表わされ、1ビットからなる符号部a1、11ビットからなる指数部a2および52ビットからなる仮数部a3から構成される。符号部a1は、0を正数、1を負数とする。指数部a2は、符号なしの2進整数として、単精度の場合127のゲタを履かせた表現で表わされる。仮数部a3は、整数部分以下の小数部分の値を2進数で表わされる。
例えば、10進数の数値1945.6は、(−1)1(数4)*(1+0.9(数5))*2(137(数6)−127)で表わされる。(数4)には、符号部a1で表わされる値の10進表記が設定され、ここでは1が設定される。(数5)には、仮数部a3で表わされる値の10進表記が設定され、ここでは0.9が設定される。(数6)には、指数部a2で表わされる値の10進表記が設定され、ここでは137が設定される。倍精度浮動小数点数は、(数4)、(数5)および(数6)の10進表記をそれぞれ符号部a1、指数部a2および仮数部a3に対して2進表記で表わす。なお、仮数部a3の最下位ビットの値は、後続するビットの値を繰り上げた状態となっている。
本実施例に係る圧縮処理では、このような倍精度浮動小数点数を圧縮する。圧縮処理は、倍精度浮動小数点数の数値を表すビット列の仮数部a3から循環パターンを抽出する。圧縮処理は、循環パターンが抽出された場合に、仮数部a3を循環パターンと循環パターンのビット数を示す循環数により規定する。圧縮処理は、規定された循環パターンおよび循環数を用いて、仮数部a3を圧縮する。
図2中段に示すように、倍精度浮動小数点数は、仮数部a3が圧縮される場合、4バイトで表わされる。倍精度浮動小数点数は、1ビットからなる圧縮フラグb1、1ビットからなる符号部b2、11ビットからなる指数部b3、4ビットからなる循環数部b4および15ビットからなる循環仮数部b5から構成される。図2上段に示すIEEE754で規定される倍精度浮動小数点数の構成と同じ構成は、符号部b2と指数部b3である。IEEE754で規定される倍精度浮動小数点数と異なる構成は、圧縮フラグb1、循環数部b4および循環仮数部b5である。これらの中で圧縮フラグb1および循環数部b4は、単精度浮動小数点数の構成と同一であるので、その重複する構成の説明については省略する。これらの中で循環仮数部b5は、単精度浮動小数点数の構成とビット数が異なる。循環仮数部b5は15ビットであり、循環数部b4は4ビットであるので、循環数部b4は循環仮数部b5で表わす循環パターンの最大ビット数15(0b1111)を表現できる。
ここでは、圧縮処理が、仮数部a3から循環パターン「001100110011」を抽出した場合の処理について説明する。圧縮処理は、符号部a1および指数部a2の値をそれぞれ符号部b2および指数部b3に設定する。圧縮処理は、循環数部b4に循環パターンのビット数である12を2進表現した「1100」を設定する。圧縮処理は、循環節部b52に循環パターンのビット列である「001100110011」を設定する。圧縮処理は、有限仮数部b51に循環パターンが開始されるまでのビット列である「111」を設定する。そして、圧縮処理は、圧縮フラグb1に圧縮されることを示す「1」を設定する。これにより、圧縮処理は、倍精度浮動小数点数を8バイトから4バイトに短縮することができる。
図2下段に示すように、倍精度浮動小数点数は、仮数部a3が圧縮されない場合、8バイトで表わされる。倍精度浮動小数点数は、1ビットからなる圧縮フラグb1、1ビットからなる符号部b2、11ビットからなる指数部b3、51ビットからなる短縮仮数部c1から構成される。図2中段に示す圧縮される場合の倍精度浮動小数点数の構成と同一の構成については同一符号を示すことで、その重複する構成の説明については省略する。圧縮される場合の倍精度浮動小数点数の構成と異なる構成は、短縮仮数部c1である。短縮仮数部c1は、仮数部a3の最下位ビットを落としたものである。
ここでは、圧縮処理が、仮数部a3から循環パターンを抽出しない場合の処理について説明する。圧縮処理は、符号部a1および指数部a2の値をそれぞれ符号部b2および指数部b3に設定する。圧縮処理は、仮数部a3から循環パターンを抽出しないので、短縮仮数部c1に仮数部a3の最下位ビットを落としたビット列を設定する。そして、圧縮処理は、圧縮フラグb1に圧縮されないことを示す「0」を設定する。これにより、圧縮処理は、倍精度浮動小数点数を圧縮できない場合であっても、IEEE754形式を1ビット右にずらした構成であるので、IEEE754形式と互換性を保つことができる。
ここで、浮動小数点数を圧縮する際に、単精度浮動小数点数を3バイト構成とし、倍精度浮動小数点数を4バイト構成とする理由を、以下に説明する。かかる理由は、以下の(1)〜(4)を考慮する。(1)圧縮後の構成バイト数は、バイト単位であることが望ましい。これは、データのディスクに対する入出力時間を高速にするためである。(2)圧縮後の構成バイト数は、固定長であることが望ましい。これは、データの処理時間を高速にするためである。(3)符号部と指数部は圧縮しないこととする。これは、圧縮前のIEEE754形式の浮動小数点数、圧縮できない浮動小数点数とも大小比較を可能にするためである。(4)仮数部の精度を可能な限り保つこととする。これは、精度が下がると浮動小数点数としての誤差が大きくなるからである。
このような(1)〜(4)の考慮に基づいて、単精度浮動小数点数を3バイト構成とする理由を説明する。まず、IEEE754形式の単精度浮動小数点数の構成バイト数は、4バイトであるので、(1)、(2)の考慮を反映すると、圧縮後の構成バイト数の候補は、1バイト、2バイト、3バイトである。次に、(3)の考慮を反映すると、1ビットからなる符号部b2、8ビットからなる指数部b3をそのままとするため、圧縮後の構成バイト数の候補から1バイト構成が除外される。加えて、1ビットからなる圧縮フラグb1を考慮すると、圧縮後の構成バイト数を2バイトとすると、残りのビット数が6ビットとなる。圧縮後の構成バイト数を3バイトとすると、残りのビット数が14ビットとなる。次に、(4)の考慮を反映すると、循環数部b4のビット数で循環仮数部b5を精度良く表現するため、残りのビット数が6ビットである2バイト構成が除外される。すなわち、圧縮後の精度を考慮すると、循環数部b4は最低でも3ビット(循環数部b4によって表現できる循環節部b52のビット数の最大値:7)必要である。すると、残りのビット数が6ビットである2バイト構成が除外される。
この結果、圧縮後の構成バイト数を、3バイトとする。そして、全体として3バイトに圧縮する中で循環仮数部b5の長さを最大とれる値として、循環数部b4を4ビットとし、循環仮数部b5を10ビットとすることができる。なお、10ビットである循環仮数部b5が全て循環パターンに用いられるとしても、循環仮数部b5の10ビットは循環数部b4の4ビットで表現できるので、問題はない。すなわち、循環数部b4は4ビットで15(0b1111)までの循環パターンのビット長を表現できるからである。
次に、(1)〜(4)の考慮に基づいて、倍精度浮動小数点数を4バイト構成とする理由を説明する。まず、IEEE754形式の倍精度浮動小数点数の構成バイト数は、8バイトであるので、(1)、(2)の考慮を反映すると、圧縮後の構成バイト数の候補は、1〜7バイトである。次に、(3)の考慮を反映すると、1ビットからなる符号部b2、11ビットからなる指数部b3をそのままとするため、圧縮後の構成バイト数の候補から1バイト構成が除外される。次に、(4)の考慮を反映すると、循環数部b4のビット数で循環仮数部b5を精度良く表現するため、残りのビット数が6ビットである2バイト構成が除外される。すなわち、圧縮後の精度を考慮すると、循環数部b4は最低でも3ビット(循環数部b4によって表現できる循環節部b52のビット数の最大値:7)必要である。すると、残りのビット数が6ビットである2バイト構成が除外される。加えて、1ビットからなる圧縮フラグb1を考慮すると、圧縮後の構成バイト数を3バイトとすると、残りのビット数が11ビットとなる。圧縮後の構成バイト数を4バイトとすると、残りのビット数が19ビットとなる。(4)の考慮および単精度浮動小数点数の循環仮数部b5の長さが10ビットであることから、残りのビット数が11ビットである3バイト構成が除外される。倍精度の仮数部が単精度の仮数部より短いと精度を保つことができないからである。
この結果、圧縮後の構成バイト数を、4バイトとする。そして、全体として4バイトに圧縮する中で循環仮数部b5の長さを最大とれる値として、循環数部b4を4ビットとし、循環仮数部b5を15ビットとすることができる。なお、15ビットである循環仮数部b5が全て循環パターンに用いられるとしても、循環仮数部b5の15ビットは循環数部b4の4ビットで表現できるので、問題はない。すなわち、循環数部b4は4ビットで15(0b1111)までの循環パターンのビット長を表現できるからである。
[情報処理装置の構成]
図3は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。図3に示すように、この情報処理装置1は、圧縮部10と、演算部20と、伸長部30と、記憶部40とを有する。圧縮部10は、図1、図2などに示した浮動小数点数の圧縮処理を実行する処理部である。演算部20は、浮動小数点数同士の各種演算処理を実行する。伸長部30は、圧縮部10によって圧縮された浮動小数点数の伸長処理を実行する。なお、圧縮部10は、検出部および出力部の一例である。
記憶部40は、IEEE754形式の浮動小数点数および圧縮部10によって圧縮された浮動小数点数を記憶する。なお、記憶部40は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。また、記憶部40は、例えばRAM(Random Access Memory)等の揮発性の半導体メモリ素子を利用した記憶装置に対応しても良い。
圧縮部10は、浮動小数点数の数値を表すビット列の仮数部a3から循環パターンを抽出する。圧縮部10は、循環パターンが抽出された場合に、仮数部a3を循環パターンと循環パターンのビット数(循環数)により規定する。圧縮部10は、規定された循環パターンおよび循環数を用いて、仮数部a3を圧縮する。
例えば、圧縮部10は、仮数部a3の最上位ビットから所定単位ずつビット列を照合する。所定単位は、循環仮数部b5に設定可能な循環パターンのビット列の長さであり、初期値を循環仮数部b5の長さとする。すなわち、所定単位の初期値は、単精度浮動小数点数の場合「10」であり、倍精度浮動小数点数の場合「15」である。そして、圧縮部10は、一致しない場合には、照合処理の開始位置を1ビット下位方向にシフトする。圧縮部10は、所定単位に関して、トータルのシフト数と所定単位を加算して得られた値が循環仮数部b5の長さ以下である場合には、照合処理により一致した場合循環仮数部b5で表現できると判断する。そして、圧縮部10は、仮数部a3の新たな開始位置から所定単位ずつビット列を照合する照合処理を実行する。圧縮部10は、所定単位に関して、トータルのシフト数と所定単位を加算して得られた値が循環仮数部b5の長さより大きい場合には、照合処理により一致した場合循環仮数部b5で表現できないと判断する。そして、圧縮部10は、所定単位を1ビット減算し、新たな所定単位ずつ仮数部a3の最上位ビットからビット列を照合する照合処理を実行する。そして、圧縮部10は、一致する場合には、一致するビット列を循環パターンの候補として抽出する。そして、圧縮部10は、仮数部a3の所定単位に満たない端数部分が循環パターンの候補と前方一致する場合には、循環パターンの候補を循環パターンと判断する。循環パターンが見つかると、見つかった循環パターンの1ビット先から循環パターンのビット数分も、循環パターンとなる。そこで、圧縮部10は、仮数部a3の最上位ビットから循環仮数部b5の長さ分のビット列を循環仮数部b5に設定する。圧縮部10は、循環パターンのビット数(循環数)を循環数部b4に設定する。すなわち、循環節部b52は、循環仮数部b5の後方から、循環数部b4に設定された循環パターンのビット数分のビット列である。有限仮数部b51は、循環仮数部b5の残りのビット列である。
図4は、圧縮処理の一例を示す図である。図4に示すように、圧縮部10がIEEE754形式の数値「1.1」を圧縮する一例を示す。数値「1.1」は、IEEE754で規定された単精度浮動小数点数として、図4上段のように表わされる。すなわち、数値「1.1」は、符号部a1として「0」(1ビット)、指数部a2として「01111111」(8ビット)、仮数部a3として「00011001100110011001101」(23ビット)と表現される。仮数部a3の最下位ビットは、繰り上がり処理がなされた結果の値である。
圧縮部10は、単精度浮動小数点数の循環仮数部b5の長さが10ビットであるため、初期値の所定単位を10とする。
圧縮部10は、仮数部a3の最上位ビットから所定単位である10ビットずつビット列を照合する。すなわち、仮数部a3を10(ビット)×2+3(ビット)に区別する場合である。ここでは、圧縮部10は、仮数部a3の1ビット目からの10ビット「0001100110」と後続する10ビット「0110011001」を照合するが、一致しない。そこで、圧縮部10は、照合処理の開始位置を1ビット下位方向にシフトする。
圧縮部10は、トータルのシフト数「1」と所定単位である「10」を加算して得られた値「11」が循環仮数部b5の長さ「10」より大きいので、照合処理により一致した場合循環仮数部b5で表現できないと判断する。
そこで、圧縮部10は、所定単位を1ビット減算し、新たな所定単位である9ビットずつ仮数部a3の最上位ビットからビット列を照合する。すなわち、仮数部a3を9(ビット)×2+5(ビット)に区別する場合である。ここでは、圧縮部10は、仮数部a3の1ビット目からの9ビット「000110011」と後続する9ビット「001100110」を照合するが、一致しない。そこで、圧縮部10は、照合処理の開始位置を1ビット下位方向にシフトする。
圧縮部10は、トータルのシフト数「1」と所定単位である「9」を加算して得られた値「10」が循環仮数部b5の長さ「10」以下であるので、照合処理により一致した場合循環仮数部b5で表現できると判断する。
そこで、圧縮部10は、仮数部a3の新たな開始位置から所定単位である9ビットずつビット列を照合する。すなわち、仮数部a3を1+9(ビット)×2+4(ビット)に区別する場合である。ここでは、圧縮部10は、仮数部a3の2ビット目からの9ビット「001100110」と後続する9ビット「011001100」を照合するが、一致しない。そこで、圧縮部10は、照合処理の開始位置を1ビット下位方向にシフトする。
圧縮部10は、トータルのシフト数「2」と所定単位である「9」を加算して得られた値「11」が循環仮数部b5の長さ「10」より大きいので、照合処理により一致した場合循環仮数部b5で表現できないと判断する。
そこで、圧縮部10は、所定単位を1ビット減算し、新たな所定単位である8ビットずつ仮数部a3の最上位ビットからビット列を照合する。すなわち、仮数部a3を8(ビット)×2+7(ビット)に区別する場合である。ここでは、圧縮部10は、仮数部a3の1ビット目からの8ビット「00011001」と後続する8ビット「10011001」を照合するが、一致しない。そこで、圧縮部10は、照合処理の開始位置を1ビット下位方向にシフトする。
圧縮部10は、トータルのシフト数「1」と所定単位である「8」を加算して得られた値「9」が循環仮数部b5の長さ「10」以下であるので、照合処理により一致した場合循環仮数部b5で表現できると判断する。
そこで、圧縮部10は、仮数部a3の新たな開始位置から所定単位である8ビットずつビット列を照合する。すなわち、仮数部a3を1+8(ビット)×2+6(ビット)に区別する場合である。ここでは、圧縮部10は、仮数部a3の2ビット目からの8ビット「00110011」と後続する8ビット「00110011」を照合すると、一致する。そして、圧縮部10は、一致するビット列「00110011」を循環パターンの候補として抽出する。
圧縮部10は、仮数部a3の端数部分が循環パターンの候補と前方一致する場合には、循環パターンの候補を循環パターンと判断する。ここでは、循環パターンの候補「00110011」は、端数部分「00110」と一致するので、循環パターンの候補「00110011」は、循環パターンと判断される。循環パターンが見つかると、見つかった循環パターンの1ビット先から循環パターンのビット数分の「01100110」も、循環パターンとなる。
そして、圧縮部10は、仮数部a3の最上位ビットから循環仮数部b5の長さ「10」ビット分のビット列「0001100110」を循環仮数部b5に設定する。圧縮部10は、循環パターンのビット数「8」の2進値「1000」を循環数部b4に設定する。
なお、圧縮部10は、IEEE754の浮動小数点数から圧縮する場合を説明したが、これに限定されず、オリジナルの数値から圧縮する場合であっても良い。かかる場合、圧縮部10は、オリジナルの数値をIEEE754の浮動小数点数より1ビット多めに浮動小数点数化する。これは、仮数部a3の最終ビットの繰り上がりをさせないようにするためである。そして、圧縮部10は、浮動小数点数化した数から上記した方法で圧縮すれば良い。
図3に戻って、演算部20は、大小比較部21と、加算部22と、減算部23と、乗算部24と、除算部25とを有する。
大小比較部21は、圧縮した浮動小数点数の値同士の大小を比較する。また、大小比較部21は、圧縮した浮動小数点数の値と圧縮していない浮動小数点数の値の大小を比較する。なお、圧縮していない浮動小数点数の値同士の大小の比較は、IEEE754の演算方法に従って比較するので、ここでは説明を省略する。
例えば、大小比較部21は、符号部のビットを比較する。大小比較部21は、符号部のビットが「1」である方の浮動小数点数の値を小さいと判断する。大小比較部21は、符号部のビットが同値である場合には、指数部のビットを比較する。符号部のビットの値に応じて、指数部のビットを上位ビットから順番に比較することで大小を比較する。一例として、符号部のビットが「0」である場合、指数部のビットが「1100」と「1000」とを比較すると、上位から2つ目のビットが立っている「1100」の方が大きいと判断される。
大小比較部21は、指数部のビットが同値である場合には、圧縮した浮動小数点数同士であるか否かを判定する。
大小比較部21は、圧縮した浮動小数点数同士である場合には、循環仮数部のビットを比較する。符号部のビットの値に応じて、循環仮数部のビットを上位ビットから順番に比較することで大小を比較する。大小比較部21は、循環仮数部のビットが同一でない場合には、大きい方の浮動小数点数の値を大きいと判断する。
大小比較部21は、循環仮数部のビットが同一である場合には、循環数部のビットを比較する。大小比較部21は、循環数部のビットが同一である場合には、圧縮した浮動小数点数の値同士は同一であると判断する。大小比較部21は、循環数部のビットが同一でない場合には、大小の判断ができないので、伸長して比較する。
ここで、循環数部のみ異なる場合の大小比較の一例を、以下に示す。一方の10進数の数値「3609880」のIEEE754の単精度浮動小数点数のデータ形式は、符号部a1として「0」、指数部a2として「10011000」、仮数部a3として「00011001100110011001101」である。圧縮部10により圧縮された後の単精度浮動小数点数のデータ形式は、圧縮フラグb1として「1」、符号部b2として「0」、指数部b3として「10011000」、循環数部b4として「1000」、循環仮数部b5として「0001100110」である。
他方の10進数の数値「36923080」のIEEE754の単精度浮動小数点数のデータ形式は、符号部a1として「0」、指数部a2として「10011000」、仮数部a3として「00011001101100110110011」である。圧縮部10により圧縮された後の単精度浮動小数点数のデータ形式は、圧縮フラグb1として「1」、符号部b2として「0」、指数部b3として「10011000」、循環数部b4として「0111」、循環仮数部b5として「0001100110」である。
これら2つの数値では、圧縮後について、圧縮フラグb1、符号部b2、指数部b3および循環仮数部b5が等しいが、循環数部b4のみが異なる。なお、圧縮前については、上位19ビットが等しい。これら2つの数値では、数値「36923080」が数値「3609880」より大きいが、数値「36923080」の循環数部b4「0111」の方が数値「3609880」の循環数部b4「1000」より小さい。このため、循環数部b4のみ異なる場合、大小比較部21は、大小の判断ができないので、伸長して比較する。
また、大小比較部21は、圧縮した浮動小数点数同士でない場合には、循環仮数部b5のビットと仮数部a3のビットを比較する。循環仮数部b5のビットと仮数部a3のビットを上位ビットから順番に比較することで大小を比較する。そして、大小比較部21は、循環仮数部b5のビットと仮数部a3のビットが同一である場合には、大小の判断ができないので、伸長して比較する。
加算部22は、圧縮された2つの浮動小数点数の値を加算する。なお、加算部22は、2つの浮動小数点数がどちらも圧縮されていない場合には、IEEE754の演算方法に従って加算する。また、加算部22は、2つの浮動小数点数のどちらか一方が圧縮されている場合には、圧縮されている浮動小数点数を伸長してから、IEEE754の演算方法に従って加算する。
例えば、加算部22は、大小比較部21を用いて、圧縮された2つの浮動小数点数の値の大小を比較する。加算部22は、指数部b3および循環数部b4を用いて、小さい方の数の指数部b3の値を大きい方の数の指数部b3の値に合わせるとともに、循環仮数部b5の値を調整する。一例として、加算部22は、大きい方の数の指数部b3の値から小さい方の数の指数部b3の値を減算する。加算部22は、減算して得た差分値が0であるか、または差分値が小さい方の数の循環数部b4の値であれば、小さい方の数の循環仮数部b5を差分値分右にシフトする。すなわち、差分値が0であれば、指数部b3の値は同じであるので、循環仮数部b5は調整されている。減算して得た値が小さい方の循環数部b4の値であれば、小さい方の指数が大きい方より自己の循環数分小さいので、加算部22は、指数部b3の値を循環数分大きい方向(左)にシフトして大きい方の指数に合わせる。加えて、加算部22は、循環仮数部b5の値を循環数分小さい方向(右)にシフトする。加算部22は、差分値が小さい方の循環数部b4の値より小さければ、循環節部b52の値が0である場合に限り、以下の処理を行う。すなわち、加算部22は、指数部b3の値を差分値分大きい方向(左)にシフトして大きい方の指数に合わせるととともに、循環仮数部b5を同じ値分小さい方向(右)にシフトする。
なお、差分値が小さい方の循環数部b4の値より小さい場合に、循環節部b52の値が0でなければ、加算部22は、循環仮数部b5の調整ができないので、伸長して加算すれば良い。
加算部22は、2つの浮動小数点数の循環数部b4の値を比較する。加算部22は、2つの浮動小数点数の循環数部b4の値が同一であれば、2つの浮動小数点数の循環仮数部b5を加算する。加算部22は、加算結果の繰り上がり処理を行い、正規化して指数部b3の値を求める。加算部22は、2つの浮動小数点数の循環数部b4の値が同一でなければ、循環パターンが異なるので、循環仮数部b5の繰り上がり処理を正確に行うことができないので、伸長して加算する。
減算部23は、圧縮された2つの浮動小数点数の値を減算する。なお、減算部23は、2つの浮動小数点数がどちらも圧縮されていない場合には、IEEE754の演算方法に従って加算する。また、減算部23は、2つの浮動小数点数のどちらか一方が圧縮されている場合には、圧縮されている浮動小数点数を伸長してから、IEEE754の演算方法に従って加算する。
例えば、減算部23は、大小比較部21を用いて、圧縮された2つの浮動小数点数の値の大小を比較する。減算部23は、指数部b3および循環数部b4を用いて、小さい方の数の指数部b3の値を大きい方の数の指数部b3の値に合わせるとともに、循環仮数部b5の値を調整する。調整方法は、加算部22と同じであるので、説明を省略する。
減算部23は、2つの浮動小数点数の循環数部b4の値を比較する。減算部23は、2つの浮動小数点数の循環数部b4の値が同一であれば、大きい方の数の循環仮数部b5から小さい方の数の循環仮数部b5を減算する。減算部23は、減算結果の繰り下がり処理を行い、正規化して指数部b3の値を求める。そして、減算部23は、被減算数が小さい方の数であった場合には、すなわち、減算数が大きい方の数であった場合には、符号部b2に負数であることを示す「1」を立てる。減算部23は、2つの浮動小数点数の循環数部b4の値が同一でなければ、循環パターンが異なるので、循環仮数部b5の繰り下がり処理を正確に行うことができないので、伸長して減算する。
乗算部24は、乗算対象の浮動小数点数が圧縮されていれば当該浮動小数点数を伸長する。乗算部24は、伸長された2つの浮動小数点数の値を、IEEE754の演算方法に従って乗算する。
除算部25は、除算対象の浮動小数点数が圧縮されていれば当該浮動小数点数を伸長する。除算部25は、伸長された2つの浮動小数点数の値を、IEEE754の演算方法に従って除算する。
伸長部30は、圧縮フラグb1が圧縮されたことを示す「1」であるか否かを判定する。伸長部30は、圧縮フラグb1が「1」である場合には、循環数部b4を用いて循環仮数部b5を伸長する。例えば、伸長部30は、循環仮数部b5に設定されたビット列を仮数部a3の最上位ビットの位置から設定する。そして、伸長部30は、循環仮数部b5に設定されたビット列のうち、後方の循環パターンのビット数分のビット列を仮数部a3に付け足して設定する。そして、伸長部30は、仮数部a3の最終ビットについて、繰り上がり処理を行う。そして、伸長部30は、符号部b2のビット値を符号部a1に設定する。伸長部30は、指数部b3のビット列を指数部a2に設定する。
伸長部30は、圧縮フラグb1が「1」でない場合には、短縮仮数部c1に設定されたビット列を仮数部a3の最上位ビットの位置から設定する。伸長部30は、仮数部a3の最終ビットに0または1を設定する。そして、伸長部30は、符号部b2のビット値を符号部a1に設定する。伸長部30は、指数部b3のビット列を指数部a2に設定する。
[圧縮部の処理手順]
図5は、本実施例に係る圧縮部の処理手順を示すフローチャートである。図5に示すように、圧縮部10は、数値がオリジナルであるか否かを判定する(ステップS101)。圧縮部10は、数値がオリジナルである場合には(ステップS101;Yes)、数値を1ビット多く浮動小数点化する(ステップS102)。これは、仮数部a3の最終ビットの繰り上がりをさせないようにするためである。そして、圧縮部10は、ステップS104に移行する。
一方、圧縮部10は、数値がオリジナルでない場合には(ステップS101;No)、ステップS104に移行する。ステップS104では、圧縮部10は、浮動小数点表記から符号部a1、指数部a2および仮数部a3を分離する(ステップS104)。
続いて、圧縮部10は、循環パターンの候補(循環節候補)のビット数にMを設定する(ステップS105)。Mの初期値は、循環仮数部b5の長さであり、単精度浮動小数点数の場合には「10」、倍精度浮動小数点数の場合には「15」である。そして、圧縮部10は、仮数部a3の先頭からMビットずつ照合する(ステップS106)。
圧縮部10は、照合処理により一致するか否かを判定する(ステップS107)。圧縮部10は、照合処理により一致する場合には(ステップS107;Yes)、一致するビット列を循環節候補として記憶部40に一時的に設定する(ステップS108)。そして、圧縮部10は、仮数部a3の端数部分が循環節候補と前方一致するか否かを判定する(ステップS109)。なお、圧縮部10は、仮数部a3の端数部分の最終ビットを無視するようにしても良い。仮数部a3の端数部分の最終ビットは、繰り上がった値が設定されている場合があるからである。
圧縮部10は、仮数部a3の端数部分が循環節候補と前方一致しない場合には(ステップS109;No)、照合処理により一致しなかったと判断し、ステップS112に移行する。
一方、圧縮部10は、仮数部a3の端数部分が循環節候補と前方一致する場合には(ステップS109;Yes)、循環節候補を循環節と判断し、仮数部a3の先頭から循環仮数部b5の長さ分のビット列を循環仮数部b5に設定する(ステップS110)。そして、圧縮部10は、循環節の長さを循環数部b4に設定する(ステップS110A)。そして、圧縮部10は、圧縮フラグb1を「1」に設定し、符号部a1の値を符号部b2に設定し、指数部a2の値を指数部b3に設定し、圧縮データを生成する(ステップS111)。そして、圧縮部10は、圧縮処理を終了する。
ステップS107では、圧縮部10は、照合処理により一致しない場合には(ステップS107;No)、照合処理の先頭を1ビット右にシフトする(ステップS112)。続いて、圧縮部10は、トータルのシフト数とMとを加算して得られた値が循環仮数部b5の長さより大きいか否かを判定する(ステップS113)。
圧縮部10は、トータルのシフト数とMとを加算して得られた値が循環仮数部b5の長さ以下である場合には(ステップS113;No)、照合により一致した場合循環仮数部b5で表現できると判断する。そして、圧縮部10は、シフトした位置からの照合処理をすべく、ステップS107に移行する。
一方、圧縮部10は、トータルのシフト数とMとを加算して得られた値が循環仮数部b5の長さより大きい場合には(ステップS113;Yes)、照合により一致した場合循環仮数部b5で表現できないと判断する。そして、圧縮部10は、Mを1減算する(ステップS114)。圧縮部10は、Mが1であるか否かを判定する(ステップS115)。
圧縮部10は、Mが1でない場合には(ステップS115;No)、減算した新たなMずつ照合処理をすべく、ステップS105に移行する。一方、圧縮部10は、Mが1である場合には(ステップS115;Yes)、圧縮できないと判断し、圧縮処理を終了する。
[伸長部の処理手順]
図6は、本実施例に係る伸長部の処理手順を示すフローチャートである。なお、図6では、伸長部30が、伸長対象の浮動小数点数を受け取ったものとする。
図6に示すように、伸長部30は、受け取った圧縮フラグb1が「1」であるか否かを判定する(ステップS201)。伸長部30は、圧縮フラグb1が「1」である場合には(ステップS201;Yes)、循環数部b4の値を用いて循環仮数部b5の値を伸長し、伸長したビット列を仮数部a3に設定する(ステップS202)。そして、伸長部30は、ステップS204に移行する。
一方、伸長部30は、圧縮フラグb1が「1」でない場合には(ステップS201;No)、短縮仮数部c1の値を仮数部a3に設定する(ステップS203)。そして、伸長部30は、ステップS204に移行する。
ステップS204では、伸長部30は、符号部b2の値を符号部a1に設定し、指数部b3の値を指数部a2に設定する(ステップS204)。そして、伸長部30は、伸長処理を終了する。
[大小比較部の処理手順]
図7は、本実施例に係る大小比較部の処理手順を示すフローチャートである。図7に示すように、大小比較部21は、大小比較をする2つの数値を受け取ったか否かを判定する(ステップS300)。大小比較部21は、2つの数値を受け取っていない場合には(ステップS300;No)、2つの数値を受け取るまで判定処理を繰り返す。
一方、大小比較部21は、2つの数値を受け取った場合には(ステップS300;Yes)、符号部b2のビットを比較する(ステップS301)。そして、大小比較部21は、どちらか一方の符号部b2のビットが「1」であるか否かを判定する(ステップS302)。大小比較部21は、どちらか一方の符号部b2のビットが「1」である場合には(ステップS302;Yes)、符号部b2のビットが「1」の数値が小さいと判断する(ステップS303)。なお、符号部b2のビット「1」は、負数であることを示す。そして、大小比較部21は、大小比較処理を終了する。
一方、大小比較部21は、どちらか一方の符号部b2のビットが「1」でない場合には(ステップS302;No)、すなわち、どちらも「0」またはどちらも「1」である場合には、指数部b3のビットを比較する(ステップS304)。そして、大小比較部21は、指数部b3のビットが同一であるか否かを判定する(ステップS305)。大小比較部21は、指数部b3のビットが同一でない場合には(ステップS305;No)、符号部b2のビットが「1」の場合は小さい方の数値が大きいと判断し、そうでない場合は大きい方の数値が大きいと判断する(ステップS306)。そして、大小比較部21は、大小比較処理を終了する。
一方、大小比較部21は、指数部b3のビットが同一である場合には(ステップS305;Yes)、2つの数値が圧縮された数値同士であるか否かを判定する(ステップS307)。大小比較部21は、2つの数値が圧縮された数値同士である場合には(ステップS307;Yes)、循環仮数部b5のビットを比較する(ステップS308)。大小比較部21は、循環仮数部b5のビットが同一であるか否かを判定する(ステップS309)。大小比較部21は、循環仮数部b5のビットが同一でない場合には(ステップS309;No)、符号部b2のビットが「1」の場合は小さい方の数値が大きいと判断し、そうでない場合は大きい方の数値が大きいと判断する(ステップS310)。そして、大小比較部21は、大小比較処理を終了する。
一方、大小比較部21は、循環仮数部b5のビットが同一である場合には(ステップS309;Yes)、循環数部b4のビットを比較する(ステップS311)。大小比較部21は、循環数部b4のビットが同一であるか否かを判定する(ステップS312)。大小比較部21は、循環数部b4のビットが同一である場合には(ステップS312;Yes)、2つの数値は同一であると判断する(ステップS313)。そして、大小比較部21は、大小比較処理を終了する。
一方、大小比較部21は、循環数部b4のビットが同一でない場合には(ステップS312;No)、大小の判断ができないので、伸長して比較する(ステップS314)。その結果、符号部b2のビットが「1」の場合は小さい方の数値が大きいと判断し、そうでない場合は大きい方の数値が大きいと判断する(ステップS315)。そして、大小比較部21は、大小比較処理を終了する。
ステップS307において、大小比較部21は、2つの数値が圧縮された数値同士でない場合には(ステップS307;No)、循環仮数部b5のビットと仮数部a3のビットを比較する(ステップS316)。大小比較部21は、循環仮数部b5のビットと仮数部a3のビットが同一であるか否かを判定する(ステップS317)。大小比較部21は、循環仮数部b5のビットと仮数部a3のビットが同一でない場合には(ステップS317;No)、符号部b2のビットが「1」の場合は小さい方の数値が大きいと判断し、そうでない場合は大きい方の数値が大きいと判断する(ステップS318)。そして、大小比較部21は、大小比較処理を終了する。
一方、大小比較部21は、循環仮数部b5のビットと仮数部a3のビットが同一である場合には(ステップS317;Yes)、大小の判断ができないので、伸長して比較する(ステップS319)。その結果、符号部b2のビットが「1」の場合は小さい方の数値が大きいと判断し、そうでない場合は大きい方の数値が大きいと判断する(ステップS320)。そして、大小比較部21は、大小比較処理を終了する。
[加算部の処理手順]
図8は、本実施例に係る加算部の処理手順を示すフローチャートである。図8に示すように、加算部22は、加算対象の2つの数値を受け取ったか否かを判定する(ステップS401)。加算部22は、2つの数値を受け取っていない場合には(ステップS401;No)、2つの数値を受け取るまで判定処理を繰り返す。
一方、加算部22は、2つの数値を受け取った場合には(ステップS401;Yes)、大小比較部21による大小比較処理を行う(ステップS402)。以下では、大きい方の数値をα、小さい方の数値をβとして説明する。
加算部22は、αの指数部b3の値からβの指数部b3の値を減算して得た差分値が0であるか、または差分値がβの循環数であるか否かを判定する(ステップS403)。加算部22は、差分値が0であるか、または差分値がβの循環数である場合には(ステップS403;Yes)、βの循環仮数部b5の値を差分値分右シフトする(ステップS404)。これは、βの指数部b3の値をαの指数部b3の値に合わせるためである。そして、加算部22は、αの指数部b3の値をβの指数部b3に設定する(ステップS405)。
続いて、加算部22は、αの循環数がβの循環数と一致するか否かを判定する(ステップS406)。加算部22は、αの循環数がβの循環数と一致しない場合には(ステップS406;No)、圧縮したまま加算ができないと判断し、ステップS411に移行する。
一方、加算部22は、αの循環数がβの循環数と一致する場合には(ステップS406;Yes)、αの循環仮数部b5の値とβの循環仮数部b5の値を加算する(ステップS407)。加算部22は、加算結果の繰り上がり処理を行う(ステップS408)。加算部22は、繰り上がり処理の結果を正規化して指数を求め、求めた値を指数部b3に設定する(ステップS409)。そして、加算部22は、加算処理を終了する。
ステップS403では、加算部22は、差分値が0でなく、且つ差分値がβの循環数でない場合には(ステップS403;No)、差分値がβの循環数より小さく、且つβの循環節の値が0であるか否かを判定する(ステップS410)。加算部22は、差分値がβの循環数より小さく、且つβの循環節の値が0である場合には(ステップS410;Yes)、指数部b3の値を合わせるべく、ステップS404に移行する。
一方、加算部22は、差分値がβの循環数以上、またはβの循環節の値が0でない場合には(ステップS410;No)、圧縮したまま加算ができないと判断し、ステップS411に移行する。
ステップS411では、加算部22は、伸長してからIEEE754の演算方法で加算する(ステップS411)。そして、加算部22は、加算処理を終了する。
[減算部の処理手順]
図9は、本実施例に係る減算部の処理手順を示すフローチャートである。図9に示すように、減算部23は、減算対象の2つの数値を受け取ったか否かを判定する(ステップS501)。減算部23は、2つの数値を受け取っていない場合には(ステップS501;No)、2つの数値を受け取るまで判定処理を繰り返す。
一方、減算部23は、2つの数値を受け取った場合には(ステップS501;Yes)、大小比較部21による大小比較処理を行う(ステップS502)。以下では、大きい方の数値をα、小さい方の数値をβとして説明する。
減算部23は、被減算数が減算数より小さいか否かを判定する(ステップS503)。減算部23は、被減算数が減算数より小さい場合には(ステップS503;Yes)、減算結果が負になるので、減算した後に符号部b2のビットに「1」を設定する(ステップS504)。そして、減算部23は、ステップS505に移行する。
一方、減算部23は、被減算数が減算数より小さくない場合には(ステップS503;No)、減算結果が負にならないので、ステップS505に移行する。
ステップS505では、減算部23は、αの指数部b3の値からβの指数部b3の値を減算して得た差分値が0であるか、または差分値がβの循環数であるか否かを判定する(ステップS505)。減算部23は、差分値が0であるか、または差分値がβの循環数である場合には(ステップS505;Yes)、βの循環仮数部b5の値を差分値分右シフトする(ステップS506)。これは、βの指数部b3の値をαの指数部b3の値に合わせるためである。そして、減算部23は、αの指数部b3の値をβの指数部b3に設定する(ステップS507)。
続いて、減算部23は、αの循環数がβの循環数と一致するか否かを判定する(ステップS508)。減算部23は、αの循環数がβの循環数と一致しない場合には(ステップS508;No)、圧縮したまま加算ができないと判断し、ステップS513に移行する。
一方、減算部23は、αの循環数がβの循環数と一致する場合には(ステップS508;Yes)、αの循環仮数部b5の値からβの循環仮数部b5の値を減算する(ステップS509)。減算部23は、減算結果の繰り下がり処理を行う(ステップS510)。減算部23は、繰り下がり処理の結果を正規化して指数を求め、求めた値を指数部b3に設定する(ステップS511)。そして、減算部23は、減算処理を終了する。
ステップS505では、減算部23は、差分値が0でなく、且つ差分値がβの循環数でない場合には(ステップS505;No)、差分値がβの循環数より小さく、且つβの循環節の値が0であるか否かを判定する(ステップS512)。減算部23は、差分値がβの循環数より小さく、且つβの循環節の値が0である場合には(ステップS512;Yes)、指数部b3の値を合わせるべく、ステップS506に移行する。
一方、減算部23は、差分値がβの循環数以上、またはβの循環節の値が0でない場合には(ステップS512;No)、圧縮したまま減算ができないと判断し、ステップS513に移行する。
ステップS513では、減算部23は、伸長してからIEEE754の演算方法で減算する(ステップS513)。そして、減算部23は、減算処理を終了する。
次に、本実施例に係る情報処理装置1の効果について説明する。情報処理装置1は、符号部a1、指数部a2および仮数部a3を有する浮動小数点数に対応したビット列のうち、仮数部a3に対応する部分ビット列について、特定のビットパターンの繰り返しが開始され、部分ビット列の末尾まで特定のビットパターンの順に従ったビットの並びが続く繰り返しビット部分を検出する。情報処理装置1は、検出した部分ビット列を、部分ビット列のうち特定のビットパターンの2回目以降の繰り返し部分を除くビット列と、特定のビットパターンの2回目以降の繰り返し部分を除くビット列のうち特定のビットパターンに対応するビット列の箇所を特定するビット列とを含む圧縮ビット列を出力する処理を実行する。かかる構成によれば、情報処理装置は、仮数部a3を、特定のビットパターンに対応するビット列と当該ビット列の箇所を特定するビット列とで規定することで、仮数部a3を圧縮することができる。また、情報処理装置1は、符号部a1と指数部a2をそのままにして仮数部a3を圧縮することで、圧縮後の利用効率を勘案して圧縮することができる。例えば、情報処理装置1は、圧縮したまま、圧縮前と同等の演算を行うことができる。
単精度浮動小数点数の場合、情報処理装置1は、IEEE754形式の4バイトの浮動小数点数を3バイトの浮動小数点数に圧縮する。圧縮前には、1レコードが100バイトであって、1レコードに単精度浮動小数点数が52バイト(13個)含まれるとする。圧縮後には、1レコードに単精度浮動小数点数が39バイト(13個)含まれることとなるため、情報処理装置1は、圧縮前と比較してレコード長を13バイト小さくできる。4MBのメモリにそれぞれのレコードが格納される場合、圧縮前では、以下の式(1)により、41943レコードが格納される。
4×1024×1024/100(byte/record)=41943・・・式(1)
一方、圧縮後では、以下の式(2)により、48210レコードが格納される。
4×1024×1024/(100−13)(byte/record)=48210・・・式(2)
したがって、情報処理装置1は、圧縮後では圧縮前と比較して、メモリに対して1.1倍のレコードを格納することができる。
倍精度浮動小数点数の場合、情報処理装置1は、IEEE754形式の8バイトの浮動小数点数を4バイトの浮動小数点数に圧縮する。圧縮前には、1レコードが100バイトであって、1レコードに倍精度浮動小数点数が56バイト(7個)含まれるとする。圧縮後には、1レコードに倍精度浮動小数点数が28バイト(7個)含まれることとなるため、情報処理装置1は、圧縮前と比較してレコード長を28バイト小さくできる。4MBのメモリにそれぞれのレコードが格納される場合、圧縮前では、上記式(1)により、41943レコードが格納される。
一方、圧縮後では、以下の式(3)により、58254レコードが格納される。
4×1024×1024/(100−28)(byte/record)=58254・・・式(3)
したがって、情報処理装置1は、圧縮後では圧縮前と比較して、メモリに対して1.39倍のレコードを格納することができる。
また、本実施例に係る情報処理装置1によれば、仮数部a3の上位ビットから所定単位のビット数ずつビット列を照合する。情報処理装置1は、一致しない場合には、照合処理の開始位置を1ビット分下位方向にシフトしてから照合処理を実行する。情報処理装置1は、一致する場合には、一致するビット列を循環パターンとして抽出する。かかる構成によれば、情報処理装置1は、仮数部a3の循環パターンを効率的に抽出することができる。
また、本実施例に係る情報処理装置1によれば、所定単位のビット数の照合処理で一致しない場合に、さらに以下の処理を行う。情報処理装置1は、トータルのシフト数と所定単位のビット数とを加算して得られる数値が、予め定められた循環パターンの最大ビット数より大きくなったタイミングで、所定単位のビット数を1ビット減算する。情報処理装置1は、減算して得られる新たな所定単位のビット数ずつ照合処理を実行する。かかる構成によれば、情報処理装置1は、所定単位のビット数を大きいビット数から小さいビット数へ変更して照合処理を実行することで、大きいビット数の循環パターンを優先して抽出することが可能となる。この結果、情報処理装置1は、循環の精度を保証することができる。すなわち、情報処理装置1は、小さいビット数を優先した場合に、誤って循環パターンとしてしまうことを防ぐことができる。
また、本実施例に係る情報処理装置1によれば、圧縮された2つの浮動小数点数の数値を加算する要求を受け付けると、2つの浮動小数点数の数値における循環数の値が同値である場合に、循環パターン同士を加算する。かかる構成により、情報処理装置1は、圧縮したまま加算することができる。
また、本実施例に係る情報処理装置1によれば、圧縮された2つの浮動小数点数の数値を減算する要求を受け付けると、2つの浮動小数点数の数値における循環数の値が同値である場合に、循環パターン同士を減算する。かかる構成により、情報処理装置1は、圧縮したまま減算することができる。
また、本実施例に係る情報処理装置1によれば、浮動小数点数の数値を圧縮した圧縮データのサイズをバイト数単位となるように圧縮する。かかる構成により、情報処理装置1は、バイト区切りに対応させることで、ディスクやメモリに対する入出力を高速化することができる。
下記に、本実施形態に用いられるハードウェア及びソフトウェアについて説明する。図10は、コンピュータ300のハードウェア構成例を示す図である。コンピュータ300は、例えば、プロセッサ301、RAM(Random Access Memory)302、ROM(Read Only Memory)303、ドライブ装置304、記憶媒体305、入力インターフェース(I/F)306、入力デバイス307、出力インターフェース(I/F)308、出力デバイス309、通信インターフェース(I/F)310、SAN(Storage Area Network)インターフェース(I/F)311およびバス312などを含む。それぞれのハードウェアはバス312を介して接続されている。
RAM302は読み書き可能なメモリ装置であって、例えば、SRAM(Static RAM)やDRAM(Dynamic RAM)などの半導体メモリ、またはRAMでなくてもフラッシュメモリなどが用いられる。ROM303は、PROM(Programmable ROM)なども含む。ドライブ装置304は、記憶媒体305に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体305は、ドライブ装置304によって書き込まれた情報を記憶する。記憶媒体305は、例えば、ハードディスク、SSD(Solid State Drive)などのフラッシュメモリ、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ300は、複数種類の記憶媒体それぞれについて、ドライブ装置304及び記憶媒体305を設ける。
入力インターフェース306は、入力デバイス307と接続されており、入力デバイス307から受信した入力信号をプロセッサ301に伝達する回路である。出力インターフェース308は、出力デバイス309と接続されており、出力デバイス309に、プロセッサ301の指示に応じた出力を実行させる回路である。通信インターフェース310はネットワーク400を介した通信の制御を行なう回路である。通信インターフェース310は、例えばネットワークインターフェースカード(NIC)などである。SANインターフェース311は、ストレージエリアネットワークによりコンピュータ300と接続された記憶装置との通信の制御を行なう回路である。SANインターフェース311は、例えばホストバスアダプタ(HBA)などである。
入力デバイス307は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ300の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス309は、コンピュータ300の制御に応じて情報を出力する装置である。出力デバイス309は、例えば、ディスプレイなどの画像出力装置(表示デバイス)や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス307及び出力デバイス309として用いられる。また、入力デバイス307及び出力デバイス309は、コンピュータ300と一体になっていてもよいし、コンピュータ300に含まれず、例えば、コンピュータ300に外部から接続する装置であってもよい。
例えば、プロセッサ301は、ROM303や記憶媒体305に記憶されたプログラムをRAM302に読み出し、読み出されたプログラムの手順に従って圧縮部10の処理、演算部20の処理または伸張部30の処理を行なう。その際にRAM302はプロセッサ301のワークエリアとして用いられる。記憶部40の機能は、ROM303および記憶媒体305がプログラムファイル(後述のアプリケーションプログラム204、ミドルウェア203およびOS202など)や各種データ(例えば、浮動小数点数)を記憶し、RAM302がプロセッサ301のワークエリアとして用いられることによって実現される。プロセッサ301が読み出すプログラムについては、図11を用いて説明する。
図11は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ300において、図10に示すハードウェア群201(301〜312)の制御を行なうOS(オペレーティング・システム)202が動作する。OS202に従った手順でプロセッサ301が動作して、ハードウェア群201の制御・管理が行なわれることにより、アプリケーションプログラム204やミドルウェア203に従った処理がハードウェア群201で実行される。さらに、コンピュータ300において、ミドルウェア203またはアプリケーションプログラム204が、RAM302に読み出されてプロセッサ301により実行される。
プロセッサ301が、圧縮機能が呼び出された場合に、ミドルウェア203またはアプリケーションプログラム204の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS202に基づいてハードウェア群201を制御して)圧縮部10の機能が実現される。また、プロセッサ301が、伸張機能が呼び出された場合に、ミドルウェア203またはアプリケーションプログラム204の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS202に基づいてハードウェア群201を制御して)伸張部30の機能が実現される。圧縮機能および伸張機能は、それぞれアプリケーションプログラム204自体に含まれてもよいし、アプリケーションプログラム204に従って呼び出されることで実行されるミドルウェア203の一部であってもよい。
図12は、実施形態のシステムにおける装置の構成例を示す。図12のシステムは、コンピュータ300a、コンピュータ300b、基地局500およびネットワーク400を含む。コンピュータ300aは、無線または有線の少なくとも一方により、コンピュータ300bと接続されたネットワーク400に接続している。
図3に示す圧縮部10と伸張部30とは、図12に示すコンピュータ300aとコンピュータ300bとのいずれに含まれてもよい。コンピュータ300aが圧縮部10を含み、コンピュータ300bが伸張部30を含んでも良いし、コンピュータ300bが圧縮部10を含み、コンピュータ300aが伸張部30を含んでも良い。また、コンピュータ300aとコンピュータ300bとの双方が、圧縮部10および伸張部30を備えても良い。
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。圧縮処理の対象は、単に入力される浮動小数点数以外にも、システムから入力される浮動小数点数であっても良いし、ファイル内の浮動小数点数であっても良いし、データベースに格納された浮動小数点数であっても良い。例えば、データベースに格納された浮動小数点数を上述の圧縮処理により圧縮し、データベースに更新するなどの処理が行なわれる。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
符号部、指数部および仮数部を有する浮動小数点数に対応したビット列のうち、前記仮数部に対応する部分ビット列について、特定のビットパターンの繰り返しが開始され、前記部分ビット列の末尾まで前記特定のビットパターンの順に従ったビットの並びが続く繰り返しビット部分を検出し、
検出した前記部分ビット列を、前記部分ビット列のうち前記特定のビットパターンの2回目以降の繰り返し部分を除くビット列と、前記特定のビットパターンの2回目以降の繰り返し部分を除くビット列のうち前記特定のビットパターンに対応するビット列の箇所を特定するビット列とを含む変換ビット列を出力する処理を実行する、
処理を実行させることを特徴とする処理プログラム。
(付記2)前記検出する処理は、前記仮数部の上位ビットから所定単位のビット数ずつ部分ビット列を照合し、一致しない場合には、照合処理の開始位置を1ビット分下位方向にシフトしてから照合処理を実行し、一致する場合には、一致する部分ビット列を繰り返しビット部分として抽出する
処理を実行させることを特徴とする付記1に記載の処理プログラム。
(付記3)前記検出する処理は、さらに、一致しない場合に、トータルのシフト数と所定単位のビット数とを加算して得られる数値が、予め定められた繰り返しビット部分の最大ビット数より大きくなったタイミングで、所定単位のビット数を1ビット減算し、減算して得られる新たな所定単位のビット数ずつ照合処理を実行する
処理を実行させることを特徴とする付記2に記載の処理プログラム。
(付記4)前記出力する処理によって出力された、2つの浮動小数点数の数値を加算する要求を受け付けると、2つの浮動小数点数の数値における、前記特定のビットパターンに対応するビット列の箇所を特定するビット列の値が同値である場合に、繰り返しビット部分同士を加算する
処理を実行させることを特徴とする付記1に記載の処理プログラム。
(付記5)前記出力する処理によって圧縮された、2つの浮動小数点数の数値を減算する要求を受け付けると、2つの浮動小数点数の数値における、前記特定のビットパターンに対応するビット列の箇所を特定するビット列の値が同値である場合に、繰り返しビット部分同士を減算する
処理を実行させることを特徴とする付記1に記載の処理プログラム。
(付記6)前記出力する処理は、前記浮動小数点数の数値を出力した出力データのサイズをバイト数単位となるように出力する
処理を実行させることを特徴とする付記1に記載の処理プログラム。
(付記7)符号部、指数部および仮数部を有する浮動小数点数に対応したビット列のうち、前記仮数部に対応する部分ビット列について、特定のビットパターンの繰り返しが開始され、前記部分ビット列の末尾まで前記特定のビットパターンの順に従ったビットの並びが続く繰り返しビット部分を検出する検出部と、
前記検出部によって検出された前記部分ビット列を、前記部分ビット列のうち前記特定のビットパターンの2回目以降の繰り返し部分を除くビット列と、前記特定のビットパターンの2回目以降の繰り返し部分を除くビット列のうち前記特定のビットパターンに対応するビット列の箇所を特定するビット列とを含む変換ビット列を出力する処理を実行する実行部と、
を有することを特徴とする処理装置。
(付記8)コンピュータが、
符号部、指数部および仮数部を有する浮動小数点数に対応したビット列のうち、前記仮数部に対応する部分ビット列について、特定のビットパターンの繰り返しが開始され、前記部分ビット列の末尾まで前記特定のビットパターンの順に従ったビットの並びが続く繰り返しビット部分を検出し、
検出した前記部分ビット列を、前記部分ビット列のうち前記特定のビットパターンの2回目以降の繰り返し部分を除くビット列と、前記特定のビットパターンの2回目以降の繰り返し部分を除くビット列のうち前記特定のビットパターンに対応するビット列の箇所を特定するビット列とを含む変換ビット列を出力する処理を実行する、
各処理を実行することを特徴とする処理方法。