(57)【特許請求の範囲】
【請求項１】
指数値と仮数値とを用いて表される浮動小数点数の値であって符号化する目的の値であるデータ値を記憶するデータ値記憶部と、
前記データ値記憶部に記憶される前記データ値を符号化するために用いる浮動小数点数の値であるデータ関連値を記憶するデータ関連値記憶部と、
前記データ関連値記憶部に記憶された前記データ関連値の指数値と前記データ値記憶部に記憶された前記データ値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値を生成する調整仮数値生成部と、
前記データ値記憶部に記憶された前記データ値の前記指数値に基づいて特定の指数値を生成し、前記データ値の仮数値と前記調整仮数値生成部によって生成された前記調整仮数値とに基づいて特定の仮数値を生成し、前記特定の指数値と前記特定の仮数値とに基づいて浮動小数点数の値であって符号化する値である符号化対象値を生成する符号化対象値生成部と、
前記符号化対象値生成部によって生成された前記符号化対象値を符号化してデータ符号化値を生成するデータ符号化値生成部とを備え、
前記調整仮数値生成部は、
前記データ関連値の前記仮数値を１つ以上の桁で表す仮数部に追加桁数の桁を上位側の桁として追加し、
前記データ関連値の前記指数値が前記データ値の前記指数値以下である場合、前記データ関連値の前記指数値と前記データ値の前記指数値との指数値差に相当する桁数だけ前記データ関連値の前記仮数値を下位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数以下である場合、前記データ関連値の前記仮数値を前記指数値差に相当する桁数だけ上位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数より大きい場合、前記データ関連値の前記仮数部にダミー値を設定する
ことを特徴とする符号化装置。
【請求項２】
前記調整仮数値生成部は、前記データ関連値の指数値を前記データ値の指数値と同じ値に変更する場合であって前記データ関連値の指数値の変更によって前記データ関連値の桁数が変わらないように前記データ関連値の前記仮数値を変更する場合の前記データ関連値の変更後の仮数値を前記調整仮数値として算出する
ことを特徴とする請求項１記載の符号化装置。
【請求項３】
前記符号化対象値生成部は、前記データ値の前記指数値と同じ指数値を前記特定の指数値にする
ことを特徴とする請求項１または請求項２に記載の符号化装置。
【請求項４】
前記符号化対象値生成部は、前記データ値の前記仮数値と前記調整仮数値との合計の値と、前記データ値の前記仮数値と前記調整仮数値との差の値とのいずれかの値を前記特定の仮数値にする
ことを特徴とする請求項１から請求項３いずれかに記載の符号化装置。
【請求項５】
前記符号化装置は、さらに、
浮動小数点数の特定の値である中間関連値を記憶する中間関連値記憶部を備え、
前記符号化対象値生成部は、
前記特定の指数値と前記特定の仮数値とを用いて浮動小数点数の値である中間値を生成し、前記中間値と前記中間関連値記憶部に記憶された前記中間関連値とに基づいて前記符号化対象値を生成する
ことを特徴とする請求項１から請求項４いずれかに記載の符号化装置。
【請求項６】
前記符号化対象値生成部は、前記中間値の指数値と前記中間関連値の指数値との差の値を前記符号化対象値の指数値として用いると共に、前記中間値の仮数値と同じ仮数値を前記符号化対象値の仮数値として用いて前記符号化対象値を生成する
ことを特徴とする請求項５記載の符号化装置。
【請求項７】
前記符号化装置は、さらに、
過去に生成された１つ以上の中間値それぞれを過去中間値として記憶する過去中間値記憶部と、
前記過去中間値記憶部に記憶された少なくともいずれかの過去中間値に基づいて前記中間関連値を生成する中間関連値生成部とを備える
ことを特徴とする請求項５または請求項６に記載の符号化装置。
【請求項８】
前記符号化装置は、さらに、
過去に符号化された１つ以上のデータ値それぞれを過去データ値として記憶する過去データ値記憶部と、
前記過去データ値記憶部に記憶された少なくともいずれかの過去データ値に基づいて前記データ関連値を生成するデータ関連値生成部とを備える
ことを特徴とする請求項１から請求項７いずれかに記載の符号化装置。
【請求項９】
指数値と仮数値とを用いて表される浮動小数点数の値であって符号化された値であるデータ符号化値を記憶するデータ符号化値記憶部と、
復号する目的のデータ値を得るために用いる浮動小数点数の値であるデータ関連値を記憶するデータ関連値記憶部と、
前記データ符号化値記憶部に記憶された前記データ符号化値を復号して浮動小数点数の値である符号化対象値を生成する符号化対象値復号部と、
前記符号化対象値復号部によって生成された前記符号化対象値の指数値に基づいて前記データ値の指数値を生成するデータ指数値復号部と、
前記データ指数値復号部によって生成された前記データ値の前記指数値と前記データ関連値記憶部に記憶された前記データ関連値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値を生成する調整仮数値復号部と、
前記調整仮数値復号部によって生成された前記調整仮数値と前記符号化対象値復号部によって生成された前記符号化対象値の仮数値とに基づいて前記データ値の仮数値を生成するデータ仮数値復号部とを備え、
前記調整仮数値復号部は、
前記データ関連値の前記指数値が前記データ値の前記指数値以下である場合、前記データ関連値の前記指数値と前記データ値の前記指数値との指数値差に相当する桁数だけ前記データ関連値の前記仮数値を下位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって、前記指数値差が前記データ関連値の前記仮数値を１つ以上の桁で表す仮数部に上位側の桁として追加された桁の追加桁数以下である場合、前記データ関連値の前記仮数値を前記指数値差に相当する桁数だけ上位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって、前記指数値差が前記追加桁数より大きい場合、前記データ関連値の前記仮数部にダミー値を設定する
ことを特徴とする復号装置。
【請求項１０】
データ値記憶部と、データ関連値記憶部と、調整仮数値生成部と、符号化対象値生成部と、データ符号化値生成部とを備える符号化装置を用いる符号化方法であって、
前記データ値記憶部は、指数値と仮数値とを用いて表される浮動小数点数の値であって符号化する目的の値であるデータ値を記憶する記憶部であり、
前記データ関連値記憶部は、前記データ値記憶部に記憶される前記データ値を符号化するために用いる浮動小数点数の値であるデータ関連値を記憶する記憶部であり、
前記調整仮数値生成部が、前記データ関連値記憶部に記憶された前記データ関連値の指数値と前記データ値記憶部に記憶された前記データ値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値を生成し、
前記符号化対象値生成部が、前記データ値記憶部に記憶された前記データ値の前記指数値に基づいて特定の指数値を生成し、前記データ値の仮数値と前記調整仮数値生成部によって生成された前記調整仮数値とに基づいて特定の仮数値を生成し、前記特定の指数値と前記特定の仮数値とに基づいて浮動小数点数の値であって符号化する値である符号化対象値を生成し、
前記データ符号化値生成部が、前記符号化対象値生成部によって生成された前記符号化対象値を符号化してデータ符号化値を生成し、
前記調整仮数値生成部は、前記調整仮数値を生成するために、
前記データ関連値の前記仮数値を１つ以上の桁で表す仮数部に追加桁数の桁を上位側の桁として追加し、
前記データ関連値の前記指数値が前記データ値の前記指数値以下である場合、前記データ関連値の前記指数値と前記データ値の前記指数値との指数値差に相当する桁数だけ前記データ関連値の前記仮数値を下位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数以下である場合、前記データ関連値の前記仮数値を前記指数値差に相当する桁数だけ上位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数より大きい場合、前記データ関連値の前記仮数部にダミー値を設定する
ことを特徴とする符号化方法。
【請求項１１】
データ値とデータ関連値とを用いる符号化プログラムであって、
前記データ値は、指数値と仮数値とを用いて表される浮動小数点数の値であって符号化する目的の値であり、
前記データ関連値は、前記データ値を符号化するために用いる浮動小数点数の値であり、
前記データ関連値の指数値と前記データ値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値を生成する調整仮数値生成処理と、
前記データ値の前記指数値に基づいて特定の指数値を生成し、前記データ値の仮数値と前記調整仮数値とに基づいて特定の仮数値を生成し、前記特定の指数値と前記特定の仮数値とに基づいて浮動小数点数の値であって符号化する値である符号化対象値を生成する符号化対象値生成処理と、
前記符号化対象値を符号化してデータ符号化値を生成するデータ符号化値生成処理とをコンピュータに実行させ、
前記調整仮数値生成処理は、前記調整仮数値を生成するために、
前記データ関連値の前記仮数値を１つ以上の桁で表す仮数部に追加桁数の桁を上位側の桁として追加し、
前記データ関連値の前記指数値が前記データ値の前記指数値以下である場合、前記データ関連値の前記指数値と前記データ値の前記指数値との指数値差に相当する桁数だけ前記データ関連値の前記仮数値を下位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数以下である場合、前記データ関連値の前記仮数値を前記指数値差に相当する桁数だけ上位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数より大きい場合、前記データ関連値の前記仮数部にダミー値を設定する処理である
ことを特徴とする符号化プログラム。
【請求項１２】
データ符号化値記憶部と、データ関連値記憶部と、符号化対象値復号部と、前記データ値の指数値を生成するデータ指数値復号部と、調整仮数値復号部と、データ仮数値復号部とを備える復号装置を用いる復号方法であって、
前記データ符号化値記憶部は、指数値と仮数値とを用いて表される浮動小数点数の値であって符号化された値であるデータ符号化値を記憶する記憶部であり、
前記データ関連値記憶部は、復号する目的のデータ値を得るために用いる浮動小数点数の値であるデータ関連値を記憶する記憶部であり、
前記符号化対象値復号部が、前記データ符号化値記憶部に記憶された前記データ符号化値を復号して浮動小数点数の値である符号化対象値を生成し、
前記データ指数値復号部が、前記符号化対象値復号部によって生成された前記符号化対象値の指数値に基づいて前記データ値の指数値を生成し、
前記調整仮数値復号部が、前記データ指数値復号部によって生成された前記データ値の前記指数値と前記データ関連値記憶部に記憶された前記データ関連値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値を生成し、
前記データ仮数値復号部が、前記調整仮数値復号部によって生成された前記調整仮数値と前記符号化対象値復号部によって生成された前記符号化対象値の仮数値とに基づいて前記データ値の仮数値を生成し、
前記調整仮数値復号部は、前記調整仮数値を生成するために、
前記データ関連値の前記指数値が前記データ値の前記指数値以下である場合、前記データ関連値の前記指数値と前記データ値の前記指数値との指数値差に相当する桁数だけ前記データ関連値の前記仮数値を下位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって、前記指数値差が前記データ関連値の前記仮数値を１つ以上の桁で表す仮数部に上位側の桁として追加された桁の追加桁数以下である場合、前記データ関連値の前記仮数値を前記指数値差に相当する桁数だけ上位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって、前記指数値差が前記追加桁数より大きい場合、前記データ関連値の前記仮数部にダミー値を設定する
ことを特徴とする復号方法。
【請求項１３】
データ符号化値とデータ関連値とを用いる復号プログラムであって、
前記データ符号化値は、指数値と仮数値とを用いて表される浮動小数点数の値であって符号化された値であり、
前記データ関連値は、復号する目的のデータ値を得るために用いる浮動小数点数の値であり、
前記データ符号化値記憶部に記憶された前記データ符号化値を復号して浮動小数点数の値である符号化対象値を生成する符号化対象値復号処理と、
前記符号化対象値の指数値に基づいて前記データ値の指数値を生成するデータ指数値復号処理と、
前記データ値の前記指数値と前記データ関連値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値を生成する調整仮数値復号処理と、
前記調整仮数値と前記符号化対象値の仮数値とに基づいて前記データ値の仮数値を生成するデータ仮数値復号処理とをコンピュータに実行させ、
前記調整仮数値復号処理は、前記調整仮数値を生成するために、
前記データ関連値の前記指数値が前記データ値の前記指数値以下である場合、前記データ関連値の前記指数値と前記データ値の前記指数値との指数値差に相当する桁数だけ前記データ関連値の前記仮数値を下位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって、前記指数値差が前記データ関連値の前記仮数値を１つ以上の桁で表す仮数部に上位側の桁として追加された桁の追加桁数以下である場合、前記データ関連値の前記仮数値を前記指数値差に相当する桁数だけ上位側にシフトし、
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって、前記指数値差が前記追加桁数より大きい場合、前記データ関連値の前記仮数部にダミー値を設定する処理である
ことを特徴とする復号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、データを符号化（圧縮）または復号するための符号化装置、復号装置、符号化方法、符号化プログラム、復号方法および復号プログラムに関するものである。
【背景技術】
【０００２】
データ系列を可逆圧縮する際の符号化方法として、以下のような方法が用いられている。
まず、符号化対象データに対する予測値を求める（予測値生成）。次に、予測値と符号化対象データとの残差を求める（残差生成）。そして、残差から成るデータ系列を適当な方式で符号化して符号化データを得る（残差符号化）。
残差符号化においてガンマ符号化のような可変長符号を用いる場合には、残差を求める段階を挟むことで符号化対象データと比べて小さな値（０に近い値）から成る符号化データを得られ、可変長符号化によって圧縮効果が高まることが多い。【０００３】
しかしながら、浮動小数点数のデータ（符号化対象データ）に対して単純な浮動小数演算によって残差を求めると、情報落ちによる誤差が発生するため、可逆圧縮できない。
情報落ちを避けるために浮動小数点数データを整数データと見做して単純な整数演算によって残差を求めることもできるが、この方法は浮動小数点数のデータ構造を無視しているため、適切な残差が得られない可能性がある。【０００４】
このような課題を解決するため、特許文献１は、浮動小数点数のデータ（符号部、指数部、仮数部）を指数部から成る第１部分と、符号部と仮数部とから成る第２部分との２つの部分に分離し、それぞれの部分を整数データと見做して残差を求める方法を開示している。
このように、符号部、指数部、仮数部を個別の整数データと見做して残差を求める方法は、他の文献（例えば、特許文献２）でも見受けることができ、広く利用されていると言える。【０００５】
しかしながら、符号化対象データの指数部の値と予測値の指数部の値とが異なる場合、符号化対象データの仮数部が表す値と予測値の仮数部が表す値とでは桁の大きさが異なる。このため、特許文献１などが開示している方法で仮数部の残差を求めても、仮数部の残差として意味のある値は得られない。このことは、圧縮率を低下させる要因となり得る。【０００６】
例えば、符号化対象データが「１．２３×１０＾４」（仮数部「１．２３」、指数部「４」）であり、予測値が「９．９８×１０＾３」（仮数部「９．９８」、指数部「３」）であるものとする。
この場合、符号化対象データの仮数部「１．２３」の一の位の値「１」は１０進数で万の位の値「１００００」を意味する。一方、予測値の仮数部「９．９８」の一の位の値「９」は１０進数で千の位の値「９０００」を意味する。
つまり、符号化対象データの仮数部「１．２３」と予測値の仮数部「９．９８」とでは桁の大きさが異なるため、これら仮数部の比較は浮動小数点数としての意味を持たず、これら仮数部の比較によって仮数部の残差として意味のある値は得られない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−１７５５４２号公報
【特許文献２】特開２０１１−２３８２３６号公報
【特許文献３】特開２００５−０１８６０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、例えば、浮動小数点数のデータ値（可逆圧縮する目的のデータ値）の指数値と符号化に用いる予測値の指数値とが異なる場合であっても、圧縮率を低下させずにデータ値を可逆圧縮（符号化）できるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の符号化装置は、
指数値と仮数値とを用いて表される浮動小数点数の値であって符号化する目的の値であるデータ値を記憶するデータ値記憶部と、
前記データ値記憶部に記憶される前記データ値を符号化するために用いる浮動小数点数の値であるデータ関連値を記憶するデータ関連値記憶部と、
前記データ関連値記憶部に記憶された前記データ関連値の指数値と前記データ値記憶部に記憶された前記データ値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値を生成する調整仮数値生成部と、
前記データ値記憶部に記憶された前記データ値の前記指数値に基づいて特定の指数値を生成し、前記データ値の仮数値と前記調整仮数値生成部によって生成された前記調整仮数値とに基づいて特定の仮数値を生成し、前記特定の指数値と前記特定の仮数値とに基づいて浮動小数点数の値であって符号化する値である符号化対象値を生成する符号化対象値生成部と、
前記符号化対象値生成部によって生成された前記符号化対象値を符号化してデータ符号化値を生成するデータ符号化値生成部とを備える。
【発明の効果】
【００１０】
本発明によれば、例えば、浮動小数点数のデータ値の指数値と符号化に用いる予測値（データ関連値）の指数値とが異なる場合であっても、圧縮率を低下させずにデータ値を可逆圧縮（符号化）することができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１におけるデータ圧縮装置１００の機能構成図。
【図２】実施の形態１における元データ１０１のデータ構造の一例を示す図。
【図３】実施の形態１におけるデータ符号化部２００の機能構成を示す図。
【図４】実施の形態１におけるデータ符号化部２００のデータ符号化処理を示すフローチャート。
【図５】実施の形態１におけるデータ予測値整形処理（Ｓ１２０）を示すフローチャート。
【図６】実施の形態１における第一の残差生成処理（Ｓ１３０）を示すフローチャート。
【図７】実施の形態１における符号値・仮数値設定処理（Ｓ１３２）の一例を示すフローチャート。
【図８】実施の形態１におけるデータ復号部３００の機能構成を示す図。
【図９】実施の形態１におけるデータ復号部３００のデータ復号処理を示すフローチャート。
【図１０】実施の形態１における整形後元データ復号処理（Ｓ２７０）の一例を示す図。
【図１１】実施の形態１におけるデータ圧縮装置１００のハードウェア資源の一例を示す図。
【発明を実施するための形態】
【００１２】
実施の形態１．
浮動小数点数のデータ値を圧縮（符号化）および復号するデータ圧縮装置の形態について説明する。
【００１３】
図１は、実施の形態１におけるデータ圧縮装置１００の機能構成図である。
実施の形態１におけるデータ圧縮装置１００の機能構成について、図１に基づいて説明する。
【００１４】
データ圧縮装置１００（符号化装置、復号装置の一例）は、データ符号化部２００、データ復号部３００およびデータ記憶部１９０を備える。
【００１５】
データ符号化部２００は、符号化する目的のデータ（データ値の一例）（以下、「元データ１０１」という）を入力する。
データ符号化部２００は、符号化した元データ１０１を表すデータ（データ符号化値の一例）（以下、「符号化データ１０２」という）を生成する。
データ符号化部２００は、生成した符号化データ１０２を出力する。
データ符号化部２００の詳細については後述する。
【００１６】
データ復号部３００は、符号化データ１０２を入力し、入力した符号化データ１０２を用いて元データ１０１を復号し、元データ１０１を出力する。
データ復号部３００の詳細については後述する。
【００１７】
データ記憶部１９０（データ値記憶部、データ関連値記憶部、中間関連値記憶部、過去中間値記憶部、過去データ値記憶部、データ符号化値記憶部の一例）は、データ圧縮装置１００で使用するデータを記憶する。
例えば、データ記憶部１９０は、元データ１０１、符号化データ１０２、元データ履歴ファイル１９１および第一の残差履歴ファイル１９２を記憶する。
元データ履歴ファイル１９１は、過去に符号化された１つ以上の元データ１０１（元データ１０１の履歴）（過去データ値の一例）を含むファイルである。但し、ファイル形式ではなく、元データ１０１の数個の履歴をメモリに記憶しても構わない。
第一の残差履歴ファイル１９２は、過去に生成された第一の残差（第一の残差の履歴）（過去中間値の一例）を含むファイルである。但し、ファイル形式ではなく、第一の残差の数個の履歴をメモリに記憶しても構わない。第一の残差については後述する。
【００１８】
図２は、実施の形態１における元データ１０１のデータ構造の一例を示す図である。
実施の形態１における元データ１０１のデータ構造について、図２に基づいて説明する。
【００１９】
元データ１０１は、符号部と指数部と仮数部とを用いて表される浮動小数点数の値である。また、元データ１０１を圧縮（符号化）または復号するために用いる各種のデータ値も浮動小数点数の値である。
実施の形態１において、元データ１０１および各種のデータ値は、図２に示すようなＩＥＥＥ  ７５４形式（浮動小数点数の形式の一例）またはこれに準ずる形式で表される単精度浮動小数点数の値であるものとする。但し、元データ１０１および各種のデータ値は、他の形式で表される浮動小数点数の値であっても構わない。
ＩＥＥＥ  ７５４形式で表される単精度浮動小数点数の値は、１ビットの符号部と、８ビットの指数部と、２３ビットの仮数部との計３２ビットで表される。
以下、符号部の値（プラスまたはマイナス）を「符号値」と呼び、指数部の値を「指数値」と呼び、仮数部の値を「仮数値」と呼ぶ。
例えば、１０進数形式のデータ値「−１．２３×１０＾４（＝−１２３００）」の場合、符号値は「−」であり、指数値は「４」であり、仮数値は「１．２３」である。
【００２０】
図３は、実施の形態１におけるデータ符号化部２００の機能構成を示す図である。
実施の形態１におけるデータ符号化部２００の機能構成について、図３に基づいて説明する。
【００２１】
データ符号化部２００は、データ予測値生成部２１０と、残差生成部２２０と、残差符号化部２３０とを備える。
【００２２】
データ予測値生成部２１０（データ関連値生成部の一例）は、データ記憶部１９０に予め記憶される元データ履歴ファイル１９１（図示省略）に基づいてデータ予測値を生成する。データ予測値（データ関連値の一例）は元データ１０１を予測（復号）するための値である。
データ予測値生成部２１０の詳細については後述する。
【００２３】
残差生成部２２０（符号化対象値生成部の一例）は、元データ１０１とデータ予測値生成部２１０によって生成されたデータ予測値とに基づいて第二の残差（符号化対象値の一例）を生成する。
【００２４】
残差生成部２２０は、データ予測値整形部２２１、第一の残差生成部２２２、第一の残差予測値生成部２２３および第二の残差生成部２２４を備える。
データ予測値整形部２２１（調整仮数値生成部の一例）は、元データ１０１の指数値とデータ予測値の指数値との差に基づいてデータ予測値を整形する。
第一の残差生成部２２２は、元データ１０１と整形後のデータ予測値との残差（以下、「第一の残差」という）を生成する。
第一の残差予測値生成部２２３（中間関連値生成部の一例）は、データ記憶部１９０に予め記憶される第一の残差履歴ファイル１９２（図示省略）に基づいて第一の残差予測値を生成する。第一の残差予測値（中間関連値の一例）は第一の残差（中間値の一例）を予測（復号）するための値である。
第二の残差生成部２２４は、第一残差と第一の残差予測値との残差（以下、「第二の残差」という）を生成する。
残差生成部２２０の各機能構成の詳細については後述する。
【００２５】
残差符号化部２３０（データ符号化値生成部の一例）は、残差生成部２２０の第二の残差生成部２２４によって生成される第二の残差を符号化する。これにより、符号化した元データ１０１を表す符号化データ１０２が生成される。
残差符号化部２３０の詳細については後述する。
【００２６】
図４は、実施の形態１におけるデータ符号化部２００のデータ符号化処理を示すフローチャートである。
実施の形態１におけるデータ符号化部２００のデータ符号化処理（符号化方法の一例）について、図４に基づいて説明する。
【００２７】
Ｓ１１０において、データ予測値生成部２１０は、元データ履歴ファイル１９１に基づいてデータ予測値を生成する。データ予測値は、元データ１０１と同じデータ構造を有する浮動小数点数の値である。
以下、ｉ番目（ｉは１以上の整数）の元データ１０１をｄ［ｉ］と記し、元データｄ［ｉ］のデータ予測値をｐ［ｉ］と記す。
【００２８】
例えば、データ予測値生成部２１０は、前回符号化した元データｄ［ｉ−１］を元データ履歴ファイル１９１から取得し、取得した元データｄ［ｉ−１］をデータ予測値ｐ［ｉ］の変数に設定する。つまり、ｐ［ｉ］＝ｄ［ｉ−１］である。但し、ｄ［０］は所定の定数とする。
但し、データ予測値生成部２１０は、元データｄ［ｉ−１］以外の値によってデータ予測値ｐ［ｉ］を生成しても構わない。例えば、データ予測値生成部２１０は、前々回の元データｄ［ｉ−２］をデータ予測値ｐ［ｉ］として用いても構わない。また、データ予測値生成部２１０は、元データ履歴ファイル１９１に含まれる各元データを用いて元データの線形予測を行い、線形予測値（重み付けした各元データの合計値）をデータ予測値ｐ［ｉ］として用いても構わない。さらに、データ予測値生成部２１０は、過去の元データ１０１を用いないでデータ予測値ｐ［ｉ］を生成しても構わない。例えば、所定のデータ予測値ｐ［ｉ］をデータ記憶部１９０に予め記憶しておいても構わない。
Ｓ１１０の後、Ｓ１２０に進む。
【００２９】
Ｓ１２０において、データ予測値整形部２２１は、元データｄ［ｉ］とデータ予測値ｐ［ｉ］とを入力し、入力した元データｄ［ｉ］とデータ予測値ｐ［ｉ］とを整形する。
入力とは、データ記憶部１９０やデータ圧縮装置１００の入力装置からのデータの取得を意味する。
【００３０】
図５は、実施の形態１におけるデータ予測値整形処理（Ｓ１２０）を示すフローチャートである。
実施の形態１におけるデータ予測値整形処理（Ｓ１２０）について、図５に基づいて説明する。
【００３１】
Ｓ１２１において、データ予測値整形部２２１は、元データｄ［ｉ］とデータ予測値ｐ［ｉ］とのそれぞれの仮数部の上位に（Ｎ＋２）ビットのビット列“００…００１”（ビット値０が（Ｎ＋１）個連続した後にビット値１が一つ）を追加する。パラメータＮは所定の整数である。
例えば、元データｄ［ｉ］の仮数部が“１００…００”である場合、ビット列“００…００１”を追加後の元データｄ［ｉ］の仮数部は“００…００１１００…００”である。
追加するビット列の最後のビット“１”は、ＩＥＥＥ  ７５４形式の浮動小数点数における仮数部の隠れビットに相当する。つまり、隠れビット“１”を持たない浮動小数点数の形式を用いる場合、データ予測値整形部２２１は（Ｎ＋１）個のビット値“０”が並んだビット列“００…００”を仮数部の上位に追加すればよい。
以降の処理において、データ予測値整形部２２１はビット列を追加後の元データｄ［ｉ］およびデータ予測値ｐ［ｉ］を用いる。
Ｓ１２１の後、Ｓ１２２に進む。
【００３２】
Ｓ１２２において、データ予測値整形部２２１は、元データｄ［ｉ］の指数値がデータ予測値ｐ［ｉ］の指数値以上の値であるか否かを判定する。
元データｄ［ｉ］の指数値がデータ予測値ｐ［ｉ］の指数値以上の値である場合（ＹＥＳ）、Ｓ１２３に進む。
元データｄ［ｉ］の指数値がデータ予測値ｐ［ｉ］の指数値未満の値である場合（ＮＯ）、Ｓ１２４に進む。
【００３３】
Ｓ１２３において、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の指数値を元データｄ［ｉ］の指数値と同じ値に変更する。データ予測値ｐ［ｉ］の指数値と元データｄ［ｉ］の指数値とが同じ値である場合、予測値データｐ［ｉ］の指数値は変わらない。
【００３４】
さらに、データ予測値整形部２２１は、元データｄ［ｉ］の指数値とデータ予測値ｐ［ｉ］の指数値との差（以下、「指数値差」という）と同じ数のビット数（指数値差に相当する桁数）だけ、データ予測値ｐ［ｉ］の仮数値を仮数部内で右にシフトする（仮数部からはみ出る下位ビットは切り捨てる）。
つまり、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の仮数値を指数値差に相当する桁数だけ小さな値に変更する。また、指数値差がゼロである場合、データ予測値ｐ［ｉ］の仮数値は変わらない。
仮数部からはみ出る下位ビットは無視して構わない。つまり、はみ出る下位ビットの情報が無くなっても構わない。データ予測値ｐ［ｉ］の情報落ちは元データｄ［ｉ］の圧縮の可逆性に影響を与えないからである。
例えば、元データｄ［ｉ］が１０進数形式で「１．２３×１０＾４」であり、データ予測値ｐ［ｉ］が１０進数形式で「９．９８×１０＾３」である場合、データ予測値整形部２２１は、データ予測値ｐ［ｉ］を「０．９９×１０＾４」に変更する。
Ｓ１２３により、データ予測値整形処理（Ｓ１２０）は終了する。
【００３５】
Ｓ１２４において、データ予測値整形部２２１は、データ予測値ｐ［ｉ］と元データｄ［ｉ］との指数値差がパラメータＮ以下の値であるか否かを判定する。
指数値差がパラメータＮ以下の値である場合（ＹＥＳ）、Ｓ１２５に進む。
指数値差がパラメータＮより大きい値である場合（ＮＯ）、Ｓ１２６に進む。
【００３６】
Ｓ１２５において、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の指数値を元データｄ［ｉ］の指数値と同じ値に変更する。
【００３７】
さらに、データ予測値整形部２２１は、元データｄ［ｉ］とデータ予測値ｐ［ｉ］との指数値差と同じ数のビット数（指数値差に相当する桁数）だけ、データ予測値ｐ［ｉ］の仮数値を仮数部内で左にシフトする（仮数部からはみ出る上位ビットは切り捨てる）。
つまり、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の仮数値を指数値差に相当する桁数だけ大きな値に変更する。
仮数部からはみ出る上位ビットは、Ｓ１２１で追加したビット列“００…００”のビットであるため無視して構わない。つまり、データ予測値ｐ［ｉ］の仮数部の上位ビットが切り捨てられても、データ予測値ｐ［ｉ］の仮数値の情報は失われない。
例えば、元データｄ［ｉ］が１０進数形式で「９．９８×１０＾３」であり、データ予測値ｐ［ｉ］が１０進数形式で「１．２３×１０＾４」である場合、データ予測値整形部２２１は、データ予測値ｐ［ｉ］を「１２．３０×１０＾３」に変更する。
Ｓ１２５により、データ予測値整形処理（Ｓ１２０）は終了する。
【００３８】
Ｓ１２６において、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の指数値を元データｄ［ｉ］の指数値と同じ値に変更する。
【００３９】
さらに、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の仮数部に所定のダミー値を設定する。
つまり、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の仮数値を所定のダミー値と同じ値に変更する。
但し、ダミー値のビット数は、Ｓ１２１でビット列を追加後のデータ予測値ｐ［ｉ］の仮数部のビット数以下である。
【００４０】
データ予測値ｐ［ｉ］の仮数値をＳ１２５と同様に左にシフトした場合、データ予測値ｐ［ｉ］の仮数値の上位ビットが切り捨てられてしまうため、元データｄ［ｉ］の仮数値とデータ予測値ｐ［ｉ］の仮数値との間に関係が無くなる可能性がある。
そこで、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の利用を諦めてデータ予測値ｐ［ｉ］の仮数部にダミー値を設定する。
【００４１】
ダミー値は任意の値で構わない。例えば、ダミー値はゼロ（全てのビットのビット値が０）でもよい。
また、ダミー値は、（Ｓ１２１でビット列を追加後の）元データｄ［ｉ］の仮数値が取り得る値の中央値でもよい。この中央値はビット列“００…０１１０…００”で表すことができる。中央値のダミー値をデータ予測値ｐ［ｉ］の仮数値として用いた場合、元データｄ［ｉ］とデータ予測値ｐ［ｉ］との仮数値の差が縮小化され、圧縮率の低下を抑える効果が期待できる。データと予測値との差を縮小化する方法については、特許文献３においても開示されている。
Ｓ１２６により、データ予測値整形処理（Ｓ１２０）は終了する。
【００４２】
データ予測値整形処理（Ｓ１２０）において、データ予測値整形部２２１は、データ予測値ｐ［ｉ］の指数値を元データｄ［ｉ］の指数値に揃えるように、データ予測値ｐ［ｉ］を整形する。
この際、データ予測値整形部２２１は、元データｄ［ｉ］の情報落ちを発生させず、且つ、データ整形に伴うビット数の増加量が予め定められた一定値（Ｎ）を超えないようにする。
これにより、整形後のデータ予測値ｐ［ｉ］と整形後の元データｄ［ｉ］とのそれぞれの仮数値を用いて、意味ある比較および演算が可能となる。
また、元データｄ［ｉ］の指数値に基づいてデータ予測値ｐ［ｉ］が整形されるため、整形後のデータ予測値ｐ［ｉ］を用いて生成される符号化データ１０２から元データｄ［ｉ］を復号することができる。元データｄ［ｉ］の復号処理については後述する。
【００４３】
図４に戻り、データ符号化処理の説明を続ける。
以下、整形後の元データｄ［ｉ］を元データｄ’［ｉ］と記し、整形後のデータ予測値ｐ［ｉ］をデータ予測値ｐ’［ｉ］と記す。
Ｓ１２０の後、Ｓ１３０に進む。
【００４４】
Ｓ１３０において、第一の残差生成部２２２は、元データｄ’［ｉ］とデータ予測値ｐ’［ｉ］との残差を生成する。残差とは、複数の値を比較した比較結果に基づいて生成される値のことである。
但し、第一の残差生成部２２２は、元データｄ’［ｉ］とデータ予測値ｐ’［ｉ］とのそれぞれの符号値および仮数値について残差を算出し、指数値については残差を算出せずに元データｄ’［ｉ］の指数値を用いる。
以下、元データｄ’［ｉ］とデータ予測値ｐ’［ｉ］との残差を第一の残差ｒ１［ｉ］と記す。第一の残差ｒ１［ｉ］は、元データｄ’［ｉ］およびデータ予測値ｐ’［ｉ］と同じデータ構造を有する浮動小数点数の値である。
【００４５】
図６は、実施の形態１における第一の残差生成処理（Ｓ１３０）を示すフローチャートである。
実施の形態１における第一の残差生成処理（Ｓ１３０）について、図６に基づいて説明する。
【００４６】
Ｓ１３１において、第一の残差生成部２２２は、第一の残差ｒ１［ｉ］の指数部に元データｄ’［ｉ］の指数値を設定する。
但し、第一の残差生成部２２２は、元データｄ’［ｉ］の指数値に基づくその他の値を第一の残差ｒ１［ｉ］の指数部に設定しても構わない。例えば、第一の残差生成部２２２は、元データｄ’［ｉ］の指数値から所定値を引いた値（または足した値）を第一の残差ｒ１［ｉ］の指数部に設定してもよい。
元データｄ’［ｉ］の指数値に基づいて第一の残差ｒ１［ｉ］の指数値を生成することにより、第一の残差ｒ１［ｉ］を用いて生成される符号化データ１０２から元データｄ［ｉ］を復号することができる。元データｄ［ｉ］の復号処理については後述する。
Ｓ１３１の後、Ｓ１３２に進む。
【００４７】
Ｓ１３２において、第一の残差生成部２２２は、元データｄ’［ｉ］とデータ予測値ｐ’［ｉ］とのそれぞれの符号値および仮数値に基づいて、第一の残差ｒ１［ｉ］の符号値および仮数値を設定する。
符号値・仮数値設定処理（Ｓ１３２）の一例について以下に説明する。
Ｓ１３２により、第一の残差生成処理（Ｓ１３０）は終了する。
【００４８】
図７は、実施の形態１における符号値・仮数値設定処理（Ｓ１３２）の一例を示すフローチャートである。
実施の形態１における符号値・仮数値設定処理（Ｓ１３２）の一例について、図７に基づいて説明する。
【００４９】
Ｓ１３２−１において、第一の残差生成部２２２は、元データｄ’［ｉ］の符号値とデータ予測値ｐ’［ｉ］の符号値とが同じ値であるか否かを判定する。
元データｄ’［ｉ］の符号値とデータ予測値ｐ’［ｉ］の符号値とが同じ値である場合（ＹＥＳ）、Ｓ１３２−４に進む。
元データｄ’［ｉ］の符号値とデータ予測値ｐ’［ｉ］の符号値とが異なる値である場合（ＮＯ）、Ｓ１３２−２に進む。
【００５０】
Ｓ１３２−２において、第一の残差生成部２２２は、第一の残差ｒ１［ｉ］の符号部に元データｄ’［ｉ］の符号値を設定する。
Ｓ１３２−２の後、Ｓ１３２−３に進む。
【００５１】
Ｓ１３２−３において、第一の残差生成部２２２は、第一の残差ｒ１［ｉ］の仮数部に元データｄ’［ｉ］の仮数値とデータ予測値ｐ’［ｉ］の仮数値との合計値を設定する。
Ｓ１３２−３により、符号値・仮数値設定処理（Ｓ１３２）は終了する。
【００５２】
Ｓ１３２−４において、第一の残差生成部２２２は、元データｄ’［ｉ］の仮数値がデータ予測値ｐ’［ｉ］の仮数値以上の値であるか否かを判定する。
元データｄ’［ｉ］の仮数値がデータ予測値ｐ’［ｉ］の仮数値以上の値である場合（ＹＥＳ）、Ｓ１３２−５に進む。
元データｄ’［ｉ］の仮数値がデータ予測値ｐ’［ｉ］の仮数値未満の値である場合（ＮＯ）、Ｓ１３２−７に進む。
【００５３】
Ｓ１３２−５において、第一の残差生成部２２２は、第一の残差ｒ１［ｉ］の符号部に元データｄ’［ｉ］の符号値を設定する。
Ｓ１３２−５の後、Ｓ１３２−６に進む。
【００５４】
Ｓ１３２−６において、第一の残差生成部２２２は、第一の残差ｒ１［ｉ］の仮数部に元データｄ’［ｉ］の仮数値からデータ予測値ｐ’［ｉ］の仮数値を差し引いた値（＝ｄ’［ｉ］の仮数値−ｐ’［ｉ］の仮数値）を設定する。
Ｓ１３２−６により、符号値・仮数値設定処理（Ｓ１３２）は終了する。
【００５５】
Ｓ１３２−７において、第一の残差生成部２２２は、第一の残差ｒ１［ｉ］の符号部にデータ予測値ｐ’［ｉ］の符号値を設定する。
Ｓ１３２−７の後、Ｓ１３２−８に進む。
【００５６】
Ｓ１３２−８において、第一の残差生成部２２２は、第一の残差ｒ１［ｉ］の仮数部にデータ予測値ｐ’［ｉ］の仮数値から元データｄ’［ｉ］の仮数値を差し引いた値（＝ｐ’［ｉ］の仮数値−ｄ’［ｉ］の仮数値）を設定する。
Ｓ１３２−８により、符号値・仮数値設定処理（Ｓ１３２）は終了する。
【００５７】
図７の符号値・仮数値設定処理（Ｓ１３２）は第一の残差ｒ１［ｉ］の符号値および仮数値を設定するための処理の一例であり、第一の残差生成部２２２はその他の処理によって第一の残差ｒ１［ｉ］の符号値および仮数値を設定しても構わない。
【００５８】
さらに、第一の残差生成部２２２は、元データｄ’［ｉ］とデータ予測値ｐ’［ｉ］とのいずれかに基づいて第一の残差ｒ１［ｉ］の符号値および仮数値を設定しても構わない。
例えば、第一の残差生成部２２２は、元データｄ’［ｉ］の符号値を第一の残差ｒ１［ｉ］の符号部に設定し、元データｄ’［ｉ］の仮数値から所定値を引いた値（または足した値）を第一の残差ｒ１［ｉ］の仮数部に設定しても構わない。
【００５９】
図４に戻り、データ符号化処理の説明を続ける。
Ｓ１３０の後、Ｓ１４０に進む。
【００６０】
Ｓ１４０において、第一の残差予測値生成部２２３は、第一の残差履歴ファイル１９２に基づいて第一の残差ｒ１［ｉ］の予測値を生成する。第一の残差ｒ１［ｉ］の予測値は、第一の残差ｒ１［ｉ］と同じデータ構造を有する浮動小数点数の値である。
以下、第一の残差ｒ１［ｉ］の予測値を第一の残差予測値をｐ＿ｒ１［ｉ］と記す。
例えば、第一の残差予測値生成部２２３は、前回生成された第一の残差ｒ１［ｉ−１］を第一の残差予測値生成部２２３から取得し、取得した第一の残差ｒ１［ｉ−１］を第一の残差予測値ｐ＿ｒ１［ｉ］の変数に設定する。つまり、ｐ＿ｒ１［ｉ］＝ｒ１［ｉ−１］である。
但し、第一の残差予測値生成部２２３は、第一の残差ｒ１［ｉ−１］以外の値を第一の残差予測値ｐ＿ｒ１［ｉ］として用いても構わない（Ｓ１１０と同様）。
Ｓ１４０の後、Ｓ１５０に進む。
【００６１】
Ｓ１５０において、第二の残差生成部２２４は、第一の残差ｒ１［ｉ］と第一の残差予測値ｐ＿ｒ１［ｉ］との残差を生成する。
この処理は、第一の残差ｒ１［ｉ］を生成する際（Ｓ１３０）に算出されなかった指数値の残差を求めることを主な目的とする処理である。
以下、第一の残差ｒ１［ｉ］と第一の残差予測値ｐ＿ｒ１［ｉ］との残差を第二の残差ｒ２［ｉ］と記す。第二の残差ｒ２［ｉ］は、第一の残差ｒ１［ｉ］および第一の残差予測値ｐ＿ｒ１［ｉ］と同じデータ構造を有する浮動小数点数の値である。
【００６２】
例えば、第二の残差生成部２２４は、第一の残差ｒ１［ｉ］の符号値を第二の残差ｒ２［ｉ］の符号部に設定し、第一の残差ｒ１［ｉ］の仮数値を第二の残差ｒ２［ｉ］の仮数部に設定し、第一の残差ｒ１［ｉ］の指数値から第一の残差予測値ｐ＿ｒ１［ｉ］の指数値を減じた値を第二の残差ｒ２［ｉ］の指数部に設定する。
【００６３】
但し、第二の残差生成部２２４は、上記以外の値を第二の残差ｒ２［ｉ］の符号部、指数部および仮数部に設定してもよい。
例えば、第二の残差生成部２２４は、図６および図７で説明した第一の残差生成処理（Ｓ１３０）と同様に第二の残差ｒ２［ｉ］の符号部および仮数部を生成し、第一の残差ｒ１［ｉ］の指数値から第一の残差予測値ｐ＿ｒ１［ｉ］の指数値を減じた値を第二の残差ｒ２［ｉ］の指数部に設定してもよい。この場合、第二の残差生成部２２４は、図６および図７において、第一の残差ｒ１［ｉ］を第二の残差ｒ２［ｉ］に置き換え、元データｄ’［ｉ］を第一の残差ｒ１［ｉ］に置き換え、データ予測値ｐ’［ｉ］を第一の残差予測値ｐ＿ｒ１［ｉ］に置き換えて処理を実行すればよい。
これにより、符号値および仮数値については２段階（Ｓ１３０、Ｓ１５０）で残差を算出することができる。
【００６４】
さらに、第二の残差生成部２２４は、第一の残差ｒ１［ｉ］と第一の残差予測値ｐ＿ｒ１［ｉ］とのいずれかに基づいて第二の残差ｒ２［ｉ］を生成してもよい。
例えば、第二の残差生成部２２４は、第一の残差予測値ｐ＿ｒ１［ｉ］の符号値（または逆の符号値）を第二の残差ｒ２［ｉ］の符号部に設定し、第一の残差予測値ｐ＿ｒ１［ｉ］の指数値（または所定値を加算・減算した値）を第二の残差ｒ２［ｉ］の指数部に設定し、第一の残差予測値ｐ＿ｒ１［ｉ］の仮数値（または所定値を加算・減算した値）を第二の残差ｒ２［ｉ］の仮数部に設定してもよい。
Ｓ１５０の後、Ｓ１６０に進む。
【００６５】
Ｓ１６０において、残差符号化部２３０は、第二の残差ｒ２［ｉ］を所定の符号化処理によって符号化して符号化データ１０２を生成し、生成した符号化データ１０２を出力する。
例えば、残差符号化部２３０は、ガンマ符号化、デルタ符号化、ゴロム・ライス符号化またはその他の可変長符号化方式によって第二の残差ｒ２［ｉ］を符号化する。また、残差符号化部２３０は、第二の残差ｒ２［ｉ］の符号部、指数部、仮数部またはこれらの組み合わせを特許文献１や特許文献２と同様に個別の整数値として扱って、第二の残差ｒ２［ｉ］を符号化しても構わない。
出力とは、データ記憶部１９０への記憶やデータ圧縮装置１００の出力装置への出力を意味する。
Ｓ１６０により、データ符号化処理は終了する。
【００６６】
以上のように、データ符号化部２００は、元データｄ［ｉ］の情報落ちを発生させることなく、元データｄ［ｉ］とデータ予測値ｐ［ｉ］とのそれぞれの指数値の違いによる仮数値の桁のずれを解消することができる（Ｓ１２０参照）。
また、データ符号化部２００は、浮動小数点数のデータ構造を反映した第一の残差ｒ１［ｉ］および第二の残差ｒ２［ｉ］を生成することができる（Ｓ１３０、Ｓ１５０参照）。
そして、データ符号化部２００は、このような第二の残差ｒ２［ｉ］を符号化して符号化データ１０２を生成することができる（Ｓ１６０参照）。このとき、Ｓ１２０におけるデータ予測値ｐ［ｉ］の整形方法を特定するための付加情報は不要である。つまり、データ符号化部２００は、付加情報が不要な分、符号化による圧縮効果を高めることができる。
【００６７】
図８は、実施の形態１におけるデータ復号部３００の機能構成を示す図である。
実施の形態１におけるデータ復号部３００の機能構成について、図８に基づいて説明する。
【００６８】
データ復号部３００は、第二の残差復号部３１０、第一の残差復号部３２０、予測値整形方法特定部３３０、元データ復号部３４０、データ予測値生成部３０１および第一の残差予測値生成部３０２を備える。
【００６９】
第二の残差復号部３１０（符号化対象値復号部の一例）は、符号化データ１０２から第二の残差ｒ２［ｉ］を復号する。
第二の残差復号部３１０の詳細については後述する。
【００７０】
第一の残差復号部３２０（中間値復号部の一例）は、第二の残差ｒ２［ｉ］と第一の残差予測値ｐ＿ｒ１［ｉ］とに基づいて第一の残差ｒ１［ｉ］を生成する。
第一の残差復号部３２０の詳細については後述する。
【００７１】
予測値整形方法特定部３３０（データ指数値復号部の一例）は、第一の残差ｒ１［ｉ］の指数値に基づいて元データｄ［ｉ］の指数値を生成する。
予測値整形方法特定部３３０（調整仮数値復号部の一例）は、元データｄ［ｉ］の指数値とデータ予測値ｐ［ｉ］とに基づいて整形後のデータ予測値ｐ’［ｉ］を生成する。
予測値整形方法特定部３３０の詳細については後述する。
【００７２】
元データ復号部３４０（データ仮数値復号部の一例）は、整形後のデータ予測値ｐ’［ｉ］と第一の残差ｒ１［ｉ］とに基づいて元データｄ［ｉ］（元データ１０１）を生成する。
元データ復号部３４０の詳細については後述する。
【００７３】
データ予測値生成部３０１（調整仮数値生成部の一例）は、データ符号化部２００のデータ予測値生成部２１０（図３参照）と同じ機能構成である。
【００７４】
第一の残差予測値生成部３０２（中間関連値生成部の一例）は、データ符号化部２００の第一の残差予測値生成部２２３（図３参照）と同じ機能構成である。
【００７５】
図９は、実施の形態１におけるデータ復号部３００のデータ復号処理を示すフローチャートである。
実施の形態１におけるデータ復号部３００のデータ復号処理（復号方法の一例）について、図９に基づいて説明する。
【００７６】
Ｓ２１０において、データ予測値生成部３０１は、元データ履歴ファイル１９１に基づいてデータ予測値ｐ［ｉ］を生成する。
データ予測値ｐ［ｉ］の生成方法は、データ符号化処理（図４参照）のＳ１１０における生成方法と同じである。
Ｓ２１０の後、Ｓ２２０に進む。
【００７７】
Ｓ２２０において、第一の残差予測値生成部３０２は、第一の残差履歴ファイル１９２に基づいて第一の残差予測値ｐ＿ｒ１［ｉ］を生成する。
第一の残差予測値ｐ＿ｒ１［ｉ］の生成方法は、データ符号化処理（図４参照）のＳ１４０における生成方法と同じである。
Ｓ２２０の後、Ｓ２３０に進む。
【００７８】
Ｓ２３０において、第二の残差復号部３１０は、第二の残差ｒ２［ｉ］を符号化した符号化データ１０２を入力し、入力した符号化データ１０２に対して所定の復号処理を実行して第二の残差ｒ２［ｉ］を復号する。
但し、第二の残差復号部３１０が実行する復号処理は、データ符号化処理（図４参照）のＳ１６０で実行される符号化処理に対応する処理である。
Ｓ２３０の後、Ｓ２４０に進む。
【００７９】
Ｓ２４０において、第一の残差復号部３２０は、第二の残差ｒ２［ｉ］と第一の残差予測値ｐ＿ｒ１［ｉ］とに基づいて第一の残差ｒ１［ｉ］を生成する。
この第一の残差復号処理（Ｓ２４０）は、データ符号化処理（図４参照）の第二の残差生成処理（Ｓ１５０）に対応する処理（逆算する処理）である。
【００８０】
例えば、第二の残差生成部処理（Ｓ１５０）が以下のような処理であるものとする。
（１）第一の残差ｒ１［ｉ］の符号値を第二の残差ｒ２［ｉ］の符号部に設定する。
（２）第一の残差ｒ１［ｉ］の仮数値を第二の残差ｒ２［ｉ］の仮数部に設定する。
（３）第一の残差ｒ１［ｉ］の指数値から第一の残差予測値ｐ＿ｒ１［ｉ］の指数値を減じた値を第二の残差ｒ２［ｉ］の指数部に設定する。
【００８１】
この場合、第一の残差復号部３２０は、以下のような処理で第一の残差ｒ１［ｉ］を生成する。
（１）第二の残差ｒ２［ｉ］の符号値を第一の残差ｒ１［ｉ］の符号部に設定する。
（２）第二の残差ｒ２［ｉ］の仮数値を第一の残差ｒ１［ｉ］の仮数部に設定する。
（３）第二の残差ｒ２［ｉ］の指数値に第一の残差予測値ｐ＿ｒ１［ｉ］の指数値を加えた値を第一の残差ｒ１［ｉ］の指数部に設定する。
Ｓ２４０の後、Ｓ２５０に進む。
【００８２】
Ｓ２５０において、予測値整形方法特定部３３０は、第一の残差ｒ１［ｉ］の指数値に基づいて元データｄ［ｉ］の指数値を生成する。
この元データ指数値復号処理（Ｓ２５０）は、第一の残差生成処理（図６参照）のＳ１３１に対応する処理（逆算する処理）である。
第一の残差生成処理（図６参照）のＳ１３１において元データｄ［ｉ］の指数値に基づいて第一の残差ｒ１［ｉ］の指数値が生成されているため、逆算する処理によって第一の残差ｒ１［ｉ］の指数値に基づいて元データｄ［ｉ］の指数値を生成することができる。
例えば、第一の残差生成処理（図６参照）のＳ１３１が第一の残差ｒ［ｉ］の指数部に元データｄ’［ｉ］の指数値（＝元データｄ［ｉ］の指数値）を設定する処理である場合、第一の残差ｒ１［ｉ］の指数値と同じ値が元データｄ［ｉ］の指数値である。
Ｓ２５０の後、Ｓ２６０に進む。
【００８３】
Ｓ２６０において、予測値整形方法特定部３３０は、元データｄ［ｉ］の指数値とデータ予測値ｐ［ｉ］とに基づいて整形後のデータ予測値ｐ’［ｉ］を生成する。
整形後のデータ予測値ｐ’［ｉ］の生成方法は、データ予測値整形処理（図５参照）のＳ１２２からＳ１２６と同じである。
データ予測値整形処理（図５参照）のＳ１２２からＳ１２６において元データｄ［ｉ］の指数値とデータ予測値ｐ［ｉ］とに基づいて整形後のデータ予測値ｐ’［ｉ］が生成されているため、元データｄ［ｉ］の符号値および仮数値が得られていなくても整形後のデータ予測値ｐ’［ｉ］を生成することができる。
Ｓ２６０の後、Ｓ２７０に進む。
【００８４】
Ｓ２７０において、元データ復号部３４０は、整形後のデータ予測値ｐ’［ｉ］と第一の残差ｒ１［ｉ］とに基づいて整形後の元データｄ’［ｉ］を生成する。
この整形後元データ復号処理（Ｓ２７０）は、第一の残差生成処理（図６参照）のＳ１３２に対応する処理（逆算する処理）である。
【００８５】
図１０は、実施の形態１における整形後元データ復号処理（Ｓ２７０）の一例を示す図である。
第一の残差生成処理（図６参照）のＳ１３２が図７に示した処理である場合、元データ復号部３４０は図１０に示す処理を実行して整形後の元データｄ’［ｉ］を生成する。
【００８６】
Ｓ２７１において、元データ復号部３４０は、第一の差分ｒ１［ｉ］の符号値とデータ予測値ｐ’［ｉ］の符号値とが同じ値であるか否かを判定する。
第一の差分ｒ１［ｉ］の符号値とデータ予測値ｐ’［ｉ］の符号値とが同じ値である場合（ＹＥＳ）、Ｓ２７２に進む。
第一の差分ｒ１［ｉ］の符号値とデータ予測値ｐ’［ｉ］の符号値とが異なる値である場合（ＮＯ）、Ｓ２７４に進む。
【００８７】
Ｓ２７２において、元データ復号部３４０は、整形後の元データｄ’［ｉ］の符号部に第一の残差ｒ１［ｉ］の符号値を設定する。
Ｓ２７２の後、Ｓ２７３に進む。
【００８８】
Ｓ２７３において、元データ復号部３４０は、整形後の元データｄ’［ｉ］の仮数部に第一の残差ｒ１［ｉ］の仮数値とデータ予測値ｐ’［ｉ］の仮数値との合計値を設定する。
Ｓ２７３により、整形後元データ復号処理（Ｓ２７０）は終了する。
【００８９】
Ｓ２７４において、元データ復号部３４０は、第一の残差ｒ１［ｉ］の仮数値がデータ予測値ｐ’［ｉ］の仮数値以上の値であるか否かを判定する。
第一の残差ｒ１［ｉ］の仮数値がデータ予測値ｐ’［ｉ］の仮数値以上の値である場合（ＹＥＳ）、Ｓ２７７に進む。
第一の残差ｒ１［ｉ］の仮数値がデータ予測値ｐ’［ｉ］の仮数値未満の値である場合（ＮＯ）、Ｓ２７５に進む。
【００９０】
Ｓ２７５において、元データ復号部３４０は、整形後の元データｄ’［ｉ］の符号部に第一の残差ｒ１［ｉ］の符号値を設定する。
Ｓ２７５の後、Ｓ２７６に進む。
【００９１】
Ｓ２７６において、元データ復号部３４０は、整形後の元データｄ’［ｉ］の仮数部に第一の残差ｒ１［ｉ］の仮数値からデータ予測値ｐ’［ｉ］の仮数値を差し引いた値を設定する。
Ｓ２７６により、整形後元データ復号処理（Ｓ２７０）は終了する。
【００９２】
Ｓ２７７において、元データ復号部３４０は、整形後の元データｄ’［ｉ］の符号部にデータ予測値ｐ’［ｉ］の符号値を設定する。
Ｓ２７７の後、Ｓ２７８に進む。
【００９３】
Ｓ２７８において、元データ復号部３４０は、整形後の元データｄ’［ｉ］の仮数部にデータ予測値ｐ’［ｉ］の仮数値から第一の残差ｒ１［ｉ］の仮数値を差し引いた値を設定する。
Ｓ２７８により、整形後元データ復号処理（Ｓ２７０）は終了する。
【００９４】
図９に戻り、データ復号処理の説明を続ける。
Ｓ２７０の後、Ｓ２８０に進む。
【００９５】
Ｓ２８０において、元データ復号部３４０は、整形後の元データｄ’［ｉ］に基づいて元データｄ［ｉ］を生成する。
元データｄ［ｉ］の生成方法は、データ予測値整形処理（図５参照）のＳ１２１に対応する処理（逆算する処理）である。
例えば、データ予測値整形処理（図５参照）のＳ１２１が元データｄ［ｉ］の仮数部の上位に（Ｎ＋２）ビットのビット列を追加する処理である場合、元データ復号部３４０は、整形後の元データｄ’［ｉ］の仮数部から上位の（Ｎ＋２）ビットを削除する。この場合、整形後の元データｄ’［ｉ］の仮数部から上位の（Ｎ＋２）ビットを削除したものが元データｄ［ｉ］である。
Ｓ２８０により、データ復号処理は終了する。
【００９６】
データ復号処理により、データ復号部３００は、符号化データ１０２から元データ１０１を正しく復号させることができる。
【００９７】
以上で説明したデータ圧縮装置１００は、データ予測値整形部２２１、第一の残差生成部２２２および第二の残差生成部２２４を用いて符号化データ１０２を生成することにより、元データ１０１（浮動小数点数）のデータ構造の反映と可逆圧縮の両立とを実現している。
また、データ圧縮装置１００は、データ予測値ｐ’［ｉ］の整形方法に関する付加情報を不要にしたことにより、符号化による高圧縮性を実現している。
【００９８】
データ符号化処理の手順や規則（データ予測値ｐ［ｉ］の整形方法（図５参照）を含む）は予め決められてデータ符号化部２００に記憶されているものとする。
また、データ符号化処理に対応するデータ復号処理の手順や規則は予め決められてデータ復号部３００に記憶されているものとする。
【００９９】
データ符号化部２００とデータ復号部３００とはそれぞれに別の装置に備えても構わない。つまり、データ圧縮装置１００の代わりに、データ符号化部２００を備えるデータ符号装置と、データ復号部３００を備えるデータ復号装置とを設けても構わない。
この場合、データ符号化部２００とデータ復号部３００との両方に必要な情報（例えば、元データ履歴ファイル１９１、第一の残差履歴ファイル１９２）はそれぞれの装置に記憶しておく。
【０１００】
図１１は、実施の形態１におけるデータ圧縮装置１００のハードウェア資源の一例を示す図である。
図１１において、データ圧縮装置１００（コンピュータの一例）は、ＣＰＵ９０１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵ９０１は、バス９０２を介してＲＯＭ９０３、ＲＡＭ９０４、通信ボード９０５（通信装置）、ディスプレイ９１１（表示装置）、キーボード９１２、マウス９１３、ドライブ９１４、磁気ディスク装置９２０などのハードウェアデバイスと接続され、これらのハードウェアデバイスを制御する。ドライブ９１４は、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの記憶媒体を読み書きする装置である。
ＲＯＭ９０３、ＲＡＭ９０４、磁気ディスク装置９２０およびドライブ９１４は記憶装置の一例である。キーボード９１２、マウス９１３および通信ボード９０５は入力装置の一例である。ディスプレイ９１１および通信ボード９０５は出力装置の一例である。
【０１０１】
通信ボード９０５は、有線または無線で、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、電話回線などの通信網に接続している。
【０１０２】
磁気ディスク装置９２０には、ＯＳ９２１（オペレーティングシステム）、プログラム群９２２、ファイル群９２３が記憶されている。
【０１０３】
プログラム群９２２には、実施の形態において「〜部」として説明する機能を実行するプログラムが含まれる。プログラム（例えば、符号化プログラム、復号プログラム）は、ＣＰＵ９０１により読み出され実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものであり、また「〜部」の手順や方法をコンピュータに実行させるものである。
【０１０４】
ファイル群９２３には、実施の形態において説明する「〜部」で使用される各種データ（入力、出力、判定結果、計算結果、処理結果など）が含まれる。
【０１０５】
実施の形態において構成図およびフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。
フローチャートなどに基づいて説明する実施の形態の処理はＣＰＵ９０１、記憶装置、入力装置、出力装置などのハードウェアを用いて実行される。
【０１０６】
実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【０１０７】
実施の形態１において、例えば、以下のような符号化装置（データ圧縮装置１００のデータ符号化部２００）について説明した。括弧内に実施の形態１で用いた名称を記す。
符号化装置は、データ値記憶部と、データ関連値記憶部と、調整仮数値生成部と、符号化対象値生成部と、符号化値生成部とを備える。
データ値記憶部（データ記憶部１９０）は、指数値と仮数値とを用いて表される浮動小数点数の値であって符号化する目的の値であるデータ値（元データ１０１）を記憶する記憶部である。
データ関連値記憶部（データ記憶部１９０）は、前記データ値記憶部に記憶される前記データ値を符号化するために用いる浮動小数点数の値であるデータ関連値（データ予測値ｐ［ｉ］）を記憶する記憶部である。
調整仮数値生成部（データ予測値整形部２２１）は、前記データ関連値記憶部に記憶された前記データ関連値の指数値と前記データ値記憶部に記憶された前記データ値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値（データ予測値ｐ’［ｉ］の仮数値）を生成する。
符号化対象値生成部（残差生成部２２０）は、前記データ値記憶部に記憶された前記データ値の前記指数値に基づいて特定の指数値を生成する。符号化対象値生成部は、前記データ値の仮数値と前記調整仮数値生成部によって生成された前記調整仮数値とに基づいて特定の仮数値を生成する。符号化対象値生成部は、前記特定の指数値と前記特定の仮数値とに基づいて浮動小数点数の値であって符号化する値である符号化対象値（第二の残差ｒ２［ｉ］）を生成する。
データ符号化値生成部（残差符号化部２３０）は、前記符号化対象値生成部によって生成された前記符号化対象値を符号化してデータ符号化値（符号化データ１０２）を生成する。
【０１０８】
前記調整仮数値生成部は、前記データ関連値の指数値を前記データ値の指数値と同じ値に変更する場合であって前記データ関連値の指数値の変更によって前記データ関連値の桁数が変わらないように前記データ関連値の前記仮数値を変更する場合の前記データ関連値の変更後の仮数値を前記調整仮数値として算出する（図５のＳ１２３、Ｓ１２５参照）。
【０１０９】
前記調整仮数値生成部は、前記データ関連値の前記仮数値を１つ以上の桁で表す仮数部に所定の追加桁数（パラメータＮ）の桁を上位側の桁として追加する（図５のＳ１２１参照）。
前記データ関連値の前記指数値が前記データ値の前記指数値以下である場合、前記調整仮数値生成部は、前記データ関連値の前記指数値と前記データ値の前記指数値との指数値差に相当する桁数だけ前記データ関連値の前記仮数値を下位側にシフトする（図５のＳ１２３参照）。
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数以下である場合、前記調整仮数値生成部は、前記データ関連値の前記仮数値を前記指数値差に相当する桁数だけ上位側にシフトする（図５のＳ１２５参照）。
前記データ関連値の前記指数値が前記データ値の前記指数値より大きい場合であって前記指数値差が前記追加桁数より大きい場合、前記調整仮数値生成部は、前記データ関連値の前記仮数部に所定のダミー値を設定する（図５のＳ１２６参照）。
【０１１０】
前記符号化対象値生成部は、前記データ値の前記指数値と同じ指数値を前記特定の指数値にする（図６のＳ１３１参照）。
【０１１１】
前記符号化対象値生成部は、前記データ値の前記仮数値と前記調整仮数値との合計の値と、前記データ値の前記仮数値と前記調整仮数値との差の値とのいずれかの値を前記特定の仮数値にする（図７のＳ１３２−３、Ｓ１３２−６、Ｓ１３２−８参照）。
【０１１２】
前記符号化装置は、浮動小数点数の特定の値である中間関連値（第一の差分予測値ｐ＿ｒ１［ｉ］）を記憶する中間関連値記憶部（データ記憶部１９０）を備える。
前記符号化対象値生成部は、前記特定の指数値と前記特定の仮数値とを用いて浮動小数点数の値である中間値（第一の差分ｒ１［ｉ］）を生成し、前記中間値と前記中間関連値記憶部に記憶された前記中間関連値とに基づいて前記符号化対象値（第二の差分ｒ２［ｉ］）を生成する。
【０１１３】
前記符号化対象値生成部は、前記中間値の指数値と前記中間関連値の指数値との差の値を前記符号化対象値の指数値として用いると共に、前記中間値の仮数値と同じ仮数値を前記符号化対象値の仮数値として用いて前記符号化対象値を生成する（図４のＳ１５０参照）。
【０１１４】
前記符号化装置は、さらに、過去中間値記憶部と、中間関連値生成部とを備える。
過去中間値記憶部（データ記憶部１９０の第一の残差履歴ファイル１９２）は、過去に生成された１つ以上の中間値それぞれを過去中間値として記憶する記憶部である。
中間関連値生成部（第一の残差予測値生成部２２３）は、前記過去中間値記憶部に記憶された少なくともいずれかの過去中間値に基づいて前記中間関連値（第一の残差予測値ｐ＿ｒ１［ｉ］）を生成する。
【０１１５】
前記符号化装置は、さらに、過去データ値記憶部と、データ関連値生成部とを備える。
過去データ値記憶部（データ記憶部１９０の元データ履歴ファイル１９１）は、過去に符号化された１つ以上のデータ値それぞれを過去データ値として記憶する記憶部である。
データ関連値生成部（データ予測値生成部２１０）は、前記過去データ値記憶部に記憶された少なくともいずれかの過去データ値に基づいて前記データ関連値（データ予測値ｐ［ｉ］）を生成する。
【０１１６】
実施の形態１において、例えば、以下のような復号装置（データ圧縮装置１００）について説明した。括弧内に実施の形態１で用いた名称を記す。
復号装置は、データ符号化値記憶部と、データ関連値記憶部と、符号化対象値復号部と、データ指数値復号部と、調整仮数値復号部と、データ仮数値復号部とを備える。
データ符号化値記憶部（データ記憶部１９０）は、指数値と仮数値とを用いて表される浮動小数点数の値であって符号化された値であるデータ符号化値（符号化データ１０２）を記憶する記憶部である。
データ関連値記憶部（データ記憶部１９０）は、復号する目的のデータ値（元データ１０１）を得るために用いる浮動小数点数の値であるデータ関連値（データ予測値ｐ［ｉ］）を記憶する記憶部である。
符号化対象値復号部（第二の残差復号部３１０）は、前記データ符号化値記憶部に記憶された前記データ符号化値を復号して浮動小数点数の値である符号化対象値（第二の残差ｒ２［ｉ］）を生成する。
データ指数値復号部（予測値整形方法特定部３３０）は、前記符号化対象値復号部によって生成された前記符号化対象値の指数値に基づいて前記データ値の指数値を生成する。
調整仮数値復号部（予測値整形方法特定部３３０）は、前記データ指数値復号部によって生成された前記データ値の前記指数値と前記データ関連値記憶部に記憶された前記データ関連値の指数値との差に基づいて前記データ関連値の仮数値を調整して調整仮数値（データ予測値ｐ［ｉ］の仮数値）を生成する。
データ仮数値復号部（元データ復号部３４０）は、前記調整仮数値復号部によって生成された前記調整仮数部と前記符号化対象値復号部によって生成された前記符号化対象値の仮数値とに基づいて前記データ値の仮数値を生成する。
【符号の説明】
【０１１７】
１００  データ圧縮装置、１０１  元データ、１０２  符号化データ、１９０  データ記憶部、１９１  元データ履歴ファイル、１９２  第一の残差履歴ファイル、２００  データ符号化部、２１０  データ予測値生成部、２２０  残差生成部、２２１  データ予測値整形部、２２２  第一の残差生成部、２２３  第一の残差予測値生成部、２２４  第二の残差生成部、２３０  残差符号化部、３００  データ復号部、３０１  データ予測値生成部、３０２  第一の残差予測値生成部、３１０  第二の残差復号部、３２０  第一の残差復号部、３３０  予測値整形方法特定部、３４０  元データ復号部、９０１  ＣＰＵ、９０２  バス、９０３  ＲＯＭ、９０４  ＲＡＭ、９０５  通信ボード、９１１  ディスプレイ、９１２  キーボード、９１３  マウス、９１４  ドライブ、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  プログラム群、９２３  ファイル群。
【図１】
0005619326.tif 000002
【図２】
0005619326.tif 000003
【図３】
0005619326.tif 000004
【図４】
0005619326.tif 000005
【図５】
0005619326.tif 000006
【図６】
0005619326.tif 000007
【図７】
0005619326.tif 000008
【図８】
0005619326.tif 000009
【図９】
0005619326.tif 000010
【図１０】
0005619326.tif 000011
【図１１】
0005619326.tif 000012