(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0028】
以下、図面に基づき本発明を実現するにあたっての好適な各種の実施の形態の例を説明する。
<第1の実施の形態>
図1は、第1の実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア(コンピュータ・プログラム)、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム(コンピュータにそれぞれの手順を実行させるためのプログラム、コンピュータをそれぞれの手段として機能させるためのプログラム、コンピュータにそれぞれの機能を実現させるためのプログラム)、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するという意味である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、1モジュールを1プログラムで構成してもよいし、複数モジュールを1プログラムで構成してもよく、逆に1モジュールを複数プログラムで構成してもよい。また、複数モジュールは1コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって1モジュールが複数コンピュータで実行されてもよい。なお、1つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続(データの授受、指示、データ間の参照関係等)の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態にしたがって、又はそれまでの状況・状態にしたがって定まることの意を含めて用いる。「予め定められた値」が複数ある場合は、それぞれ異なった値であってもよいし、2以上の値(もちろんのことながら、全ての値も含む)が同じであってもよい。また、「Aである場合、Bをする」という記載は、「Aであるか否かを判断し、Aであると判断した場合はBをする」の意味で用いる。ただし、Aであるか否かの判断が不要である場合を除く。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク(一対一対応の通信接続を含む)等の通信手段で接続されて構成されるほか、1つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」(社会システム)にすぎないものは含まない。
また、各モジュールによる処理毎に又はモジュール内で複数の処理を行う場合はその処理毎に、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、RAM(Random Access Memory)、外部記憶媒体、通信回線を介した記憶装置、CPU(Central Processing Unit)内のレジスタ等を含んでいてもよい。
【0029】
本実施の形態である情報処理システムは、符号化装置100と復号装置150によって構成されており、符号化装置100は、浮動小数点数データ群105を符号化(圧縮ともいわれる)するものであり、復号装置150は、その符号を復号(伸長ともいわれる)し、浮動小数点数データ群195を生成するものである。
【0030】
説明にあたって、用語の定義を行う。
精度とは、浮動小数点数において、仮数部の最下位の値が示す桁である。例えば1.2345e−05は、1.2345e−05=12345e−09となり、精度はe−09となる。
仮数値とは、仮数部からなる整数値である。
指数値とは、指数部からなる整数値である。
有効精度とは、ユーザーが指定する任意の精度である。本実施の形態では、ブロック内の最低精度(浮動小数点のデータのブロック内の最大の指数値)を有効精度として用いている。
無効精度とは、有効精度より高い精度である。
ブロック内最大指数値とは、ブロック内で最大の指数値である。
差分指数値とは、ブロック内最大指数値と指数値との差分である。
差分有効精度の仮数値とは、有効精度の仮数値と予測値との差分である。
基本符号とは、ブロック内最大指数値と有効精度の仮数値を符号化したデータである。
基本符号1とは、ブロック内最大指数値と分割された有効精度の仮数値の中で最低精度の仮数値を符号化したデータである。
基本符号m(m≧2)とは、ブロック内最大指数値と分割された有効精度の仮数値の中で最低精度以外の仮数値を符号化したデータである。
基本符号aとは、ブロック内最大指数値と有効精度の仮数値の予測誤差を符号化したデータである。
差分符号とは、差分指数値と無効精度の仮数値を符号化したデータである。
【0031】
符号化装置100は、
図1の例に示すように、ブロック分割モジュール110、浮動小数点数分離モジュール115、ブロック内最大指数値算出モジュール120、差分指数値算出モジュール125、仮数値分割モジュール130、第1の符号化モジュール135、第2の符号化モジュール140を有している。
ブロック分割モジュール110は、浮動小数点数分離モジュール115と接続されている。ブロック分割モジュール110は、浮動小数点数データ群105を受け付け、その浮動小数点数データ群105をブロックに分割する。なお、ここで、ブロックとは、予め定められた数のデータの集合である。
浮動小数点数分離モジュール115は、ブロック分割モジュール110、ブロック内最大指数値算出モジュール120、仮数値分割モジュール130と接続されている。浮動小数点数分離モジュール115は、浮動小数点数表現のデータを指数値と仮数値に分離する。第1の実施の形態では、ブロック分割モジュール110によってブロックに分割された浮動小数点数データ群105を指数値と仮数値に分離する。
【0032】
ブロック内最大指数値算出モジュール120は、浮動小数点数分離モジュール115、差分指数値算出モジュール125と接続されている。ブロック内最大指数値算出モジュール120は、対象とする複数の浮動小数点数のデータから最大の指数値を抽出する。第1の実施の形態では、ブロック分割モジュール110によってブロックに分割された浮動小数点数データ群105内で、最大の指数値(ブロック内最大指数値)を抽出する。
差分指数値算出モジュール125は、ブロック内最大指数値算出モジュール120、仮数値分割モジュール130と接続されている。差分指数値算出モジュール125は、予め定められた指数値と各データの指数値との差分を抽出する。
なお、ここで「予め定められた指数値」として、対象とする複数の浮動小数点数のデータ内の最大の指数値(ブロック内最大指数値算出モジュール120による処理結果である最大の指数値)としてもよい。この場合、ブロック内最大指数値とブロック内の各データの指数値との差分(差分指数値)を算出することになる。
【0033】
仮数値分割モジュール130は、浮動小数点数分離モジュール115、差分指数値算出モジュール125、第1の符号化モジュール135、第2の符号化モジュール140と接続されている。仮数値分割モジュール130は、差分指数値算出モジュール125による処理結果である差分にしたがって、各データの仮数値を上位の第1の仮数値と下位の第2の仮数値に分割する。つまり、仮数値を有効精度と無効精度に分割する。仮数値を有効精度と無効精度に分割するため、復号時にデータの精度を制御できるようになる。
また、仮数値分割モジュール130は、第2の仮数値として、浮動小数点数のデータの仮数値の下位の差分の桁数の値とし、第1の仮数値として、残りの上位の桁数の値としてもよい。
【0034】
第1の符号化モジュール135は、仮数値分割モジュール130と接続されており、基本符号142を出力する。第1の符号化モジュール135は、前述の予め定められた指数値と第1の仮数値を符号化する。具体的には、第1の符号化モジュール135は、ブロックのブロック内最大指数値と有効精度の仮数値を符号化する。
なお、第1の符号化モジュール135は、差分指数値算出モジュール125による処理結果である差分が0でない場合は、予め定められた指数値と差分と第1の仮数値を符号化するようにしてもよい。
第2の符号化モジュール140は、仮数値分割モジュール130と接続されており、差分符号144を出力する。第2の符号化モジュール140は、各データの差分と第2の仮数値を符号化する。具体的には、第2の符号化モジュール140は、ブロックの差分指数値と無効精度の仮数値を符号化する。
【0035】
復号装置150は、
図1の例に示すように、第1の復号モジュール155、第2の復号モジュール160、加算モジュール165、変換モジュール170、ブロック統合モジュール175を有している。復号装置150は、復号したデータに必要とされる精度にしたがって、第2の復号モジュール160又は加算モジュール165による処理を行わせない。つまり、第1の復号モジュール155によって復号されたデータだけを用いる場合は、第2の復号モジュール160、加算モジュール165による処理は不要である。
【0036】
第1の復号モジュール155は、加算モジュール165と接続されており、基本符号142を受け付ける。第1の復号モジュール155は、符号化装置100の第1の符号化モジュール135によって符号化された予め定められた指数値と第1の仮数値を復号する。具体的には、第1の復号モジュール155は、基本符号142からブロック内最大指数値と有効精度の仮数値を復号する。
第2の復号モジュール160は、加算モジュール165と接続されており、差分符号144を受け付ける。第2の復号モジュール160は、符号化装置100の第2の符号化モジュール140によって符号化された差分と第2の仮数値を復号する。具体的には、第2の復号モジュール160は、差分符号144から差分指数値と無効精度の仮数値を復号する。
【0037】
加算モジュール165は、第1の復号モジュール155、第2の復号モジュール160、変換モジュール170と接続されている。加算モジュール165は、第1の復号モジュール155と第2の復号モジュール160によって復号されたデータにしたがって、第1の仮数値と第2の仮数値を加算する。つまり、基本符号142の復号結果に差分符号144の復号結果を加算する。
変換モジュール170は、加算モジュール165、ブロック統合モジュール175と接続されている。変換モジュール170は、加算モジュール165による処理結果を浮動小数点数表現に変換する。
ブロック統合モジュール175は、変換モジュール170と接続されており、浮動小数点数データ群195を出力する。ブロック統合モジュール175は、ブロックを統合して、浮動小数点数データ群195を生成する。つまり、ブロック分割モジュール110の逆処理を行う。なお、基本符号142と差分符号144の両方を復号した場合は、浮動小数点数データ群105と浮動小数点数データ群195は同じになる(いわゆる可逆圧縮伸長)。基本符号142だけを復号した場合は、浮動小数点数データ群195の精度は浮動小数点数データ群105の精度以下である(いわゆる非可逆圧縮伸長)。
【0038】
符号化装置100は、入力されたデータを任意のブロックに分割する。そして、ブロック内のデータを有効精度と無効精度に分離し、有効精度のデータを基本符号、無効精度のデータを差分符号として、それぞれ符号化する。復号時に、復号装置150は、ユーザーの用途により基本符号のみを復号して有効精度のデータを得ること(非可逆圧縮伸長)も、基本符号と差分符号をあわせて復号して無効精度のデータを得ること(可逆圧縮伸長)も可能である。
【0039】
図2は、本実施の形態を利用したシステム構成例を示す説明図である。
スーパーコンピュータ210A、スーパーコンピュータ210B内の符号化装置100B、情報処理装置220内の符号化装置100A、情報処理装置230D内の復号装置150D、情報処理装置230E内の復号装置150Eは、通信回線290を介してそれぞれ接続されている。通信回線290は、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのインターネット、イントラネット等であってもよい。また、スーパーコンピュータ210による機能は、クラウドサービスとして実現してもよい。
情報処理装置220、情報処理装置230A、情報処理装置230B、情報処理装置230Cは、それぞれ接続されている。
スーパーコンピュータ210Bは、符号化装置100Bを有している。情報処理装置220は、符号化装置100Aを有している。情報処理装置230Aは、復号装置150Aを有している。情報処理装置230Bは、復号装置150Bを有している。情報処理装置230Cは、復号装置150Cを有している。情報処理装置230Dは、復号装置150Dを有している。情報処理装置230Eは、復号装置150Eを有している。
【0040】
スーパーコンピュータ210は、例えば、数値計算を行い、浮動小数点数表現のデータを出力する。このデータとして、例えば、特定の環境下における原子運動をシミュレーションして得られたデータがある。このデータの活用方法として、例えばデータの可視化と別の数値計算への入力の2つの用途がある。このとき、可視化と数値計算とで、必要な精度が異なる場合がある。具体的には、可視化では低い(量子化した)精度を用い、数値計算では高い精度を用いる場合である。
スーパーコンピュータ210Aは処理結果である浮動小数点数データ群105を、情報処理装置220に送信する。情報処理装置220の符号化装置100Aでは符号化を行って、基本符号142、差分符号144を、情報処理装置230A、情報処理装置230B、情報処理装置230Cに送信する。情報処理装置230Aは、原子運動の可視化処理を行うので、復号装置150Aは基本符号142だけを復号して、浮動小数点数データ群195の可視化処理を行う。可視化処理に差分符号144までの精度は必要ないからである。情報処理装置230Bは、解析処理によりさらに数値計算を行うので、復号装置150Bは基本符号142、差分符号144を復号して、浮動小数点数データ群195(浮動小数点数データ群105と同じ精度のデータ)を用いた数値計算を行う。情報処理装置230Cは、可視化処理とともに解析処理によりさらに数値計算を行うので、可視化処理を行う場合は、復号装置150Cは基本符号142だけを復号して、浮動小数点数データ群195の可視化処理を行う。解析処理を行う場合は、基本符号142、差分符号144を復号して、浮動小数点数データ群195を用いた数値計算を行う。
スーパーコンピュータ210Bは、そのスーパーコンピュータ210Bによる処理結果を符号化装置100Bで符号化して、情報処理装置230D、情報処理装置230Eに送信する。情報処理装置230Dは、原子運動の可視化処理を行うので、復号装置150Dは基本符号142だけを復号して、浮動小数点数データ群195の可視化処理を行う。情報処理装置230Eは、解析処理によりさらに数値計算を行うので、復号装置150Eは基本符号142、差分符号144を復号して、浮動小数点数データ群195を用いた数値計算を行う。
【0041】
図3は、第1の実施の形態(符号化装置100)による処理例を示すフローチャートである。
ステップS302では、ブロック分割モジュール110は、ブロックに分割する。
ステップS304では、浮動小数点数分離モジュール115は、指数値eと仮数値mを分離する。
ステップS306では、ブロック内最大指数値算出モジュール120は、ブロック内最大指数値fを算出する。
ステップS308では、差分指数値算出モジュール125は、差分指数値△eを算出する。
ステップS310では、仮数値分割モジュール130は、仮数値mを分割する。ステップS310の詳細な処理内容については、
図4の例に示すフローチャートを用いて後述する。
ステップS312では、第1の符号化モジュール135は、圧縮Aによる基本データの符号化を行う。
ステップS314では、第2の符号化モジュール140は、圧縮Bによる差分データの符号化を行う。
【0042】
図4は、第1の実施の形態(仮数値分割モジュール130)による処理例を示すフローチャートである。
ステップS402では、仮数値分割モジュール130は、有効精度の仮数値m1を算出する。具体的には、m1=[m/10
∧△e]によって、仮数値m1を算出する。
ステップS404では、仮数値分割モジュール130は、無効精度の仮数値m2を算出する。具体的には、m2=m−m1*10
∧△eによって、仮数値m2を算出する。
【0043】
図5は、第1の実施の形態(復号装置150)による処理例を示すフローチャートである。
ステップS502では、第1の復号モジュール155は、伸長Aによる基本データの復号を行う。
ステップS504では、第2の復号モジュール160は、伸長Bによる符号データの復号を行う。
ステップS506では、加算モジュール165は、データを加算する。
ステップS508では、変換モジュール170は、浮動小数点数を生成する。
ステップS510では、ブロック統合モジュール175は、ブロックを統合する。
【0044】
以下に、具体例を示して、各モジュールによる処理を説明する。ただし、説明を簡潔にするために、データ数は少なく、単純な数値を用いている。
図6は、数値計算結果の例を示す説明図である。
図6は、特定の環境下における1つの粒子がX軸上を動いていく様子を表している。横軸に時間[sec]、縦軸にX座標値を示している。
図7は、
図6の粒子のX座標値を有効数字5桁の浮動小数点数形式で時系列順に並べたデータである。
図7は、処理結果テーブル700のデータ構造例を示す説明図である。処理結果テーブル700は、時間[sec]欄710、X座標値[mm]欄720を有している。時間[sec]欄710は、時間[sec]を記憶している。X座標値[mm]欄720は、X座標値[mm]を記憶している。
本例では、
図7のX座標値を入力データ(浮動小数点数データ群105)とする。以降では各時間対する粒子のX座標値を要素と呼ぶことにする。
【0045】
符号化装置100による処理を説明する。
ブロック分割モジュール110は、入力データ(浮動小数点数データ群105)を、ブロックに分割する。本例では、
図8の例に示すように、時間軸を基準にして5つの要素毎(ブロック810、ブロック820)に分割する。以降では、ブロック810に注目して説明する。
【0046】
浮動小数点数分離モジュール115は、ブロック810のX座標値の浮動小数点数を仮数値と指数値とに分離する。時間t、有効数字N桁とする。時間tの浮動小数点数データをF(t)とすると、F(t)は指数値e(t)及び仮数値m(t)により式(1)のように表す。
【数1】
例えば、F(t)=1.1111e
+02のとき、e(t)=2及びm(t)=11111となる。式(1)より、
図9の例に示す注目ブロックの浮動小数点数は、
図10の例に示す指数値と
図11の例に示す仮数値に分離される。
図9は、処理結果テーブル(ブロック)900のデータ構造例を示す説明図である。処理結果テーブル(ブロック)900は、時間[sec]欄910、X座標値[mm]欄920を有している。時間[sec]欄910は、時間[sec]を記憶している。X座標値[mm]欄920は、X座標値[mm]を記憶している。
図10は、指数値テーブル1000のデータ構造例を示す説明図である。指数値テーブル1000は、時間[sec]欄1010、指数値欄1020を有している。時間[sec]欄1010は、時間[sec]を記憶している。指数値欄1020は、指数値を記憶している。
図11は、仮数値テーブル1100のデータ構造例を示す説明図である。仮数値テーブル1100は、時間[sec]欄1110、仮数値欄1120を有している。時間[sec]欄1110は、時間[sec]を記憶している。仮数値欄1120は、仮数値を記憶している。
【0047】
ブロック内最大指数値算出モジュール120は、注目ブロック内の指数値の中から最大値を計算し、それをブロック内最大指数値とする。ブロック内最大指数値fは式(2)で定義する。
【数2】
図10の例では、ブロック最大指数値は、t=4のときでf=3となる。
【0048】
差分指数値算出モジュール125は、ブロック内最大指数値と当該ブロックの各指数値から差分指数値を計算する。時間tにおける差分指数値△e(t)を、式(3)で定義する。
【数3】
式(3)より、注目ブロックの差分指数値△e(t)を
図12に示す。
図12は、差分指数値テーブル1200のデータ構造例を示す説明図である。差分指数値テーブル1200は、時間[sec]欄1210、差分指数値欄1220を有している。時間[sec]欄1210は、時間[sec]を記憶している。差分指数値欄1220は、差分指数値を記憶している。差分指数値欄1220内の値は、ブロック内最大指数値(3)から、
図10の例に示した指数値テーブル1000の指数値欄1020内の値を減算したものである。
【0049】
仮数値分割モジュール130は、仮数値を、有効精度の仮数値と無効精度の仮数値とに分割する。時間tにおける有効精度の仮数値m1(t)と無効精度の仮数値m2(t)は、それぞれ式(4)と式(5)で定義する。
【数4】
【数5】
よって、
図11の例に示す注目ブロックの仮数値m(t)は、有効精度の仮数値m1(t)(
図13)、無効精度の仮数値m2(t)(
図14)に分割される。
図13は、有効精度の仮数値テーブル1300のデータ構造例を示す説明図である。有効精度の仮数値テーブル1300は、時間[sec]欄1310、有効精度の仮数値欄1320を有している。時間[sec]欄1310は、時間[sec]を記憶している。有効精度の仮数値欄1320は、有効精度の仮数値(上位の仮数値)を記憶している。
図14は、無効精度の仮数値テーブル1400のデータ構造例を示す説明図である。無効精度の仮数値テーブル1400は、時間[sec]欄1410、無効精度の仮数値欄1420を有している。時間[sec]欄1410は、時間[sec]を記憶している。無効精度の仮数値欄1420は、無効精度の仮数値(下位の仮数値)を記憶している。
【0050】
なお、仮数値分割モジュール130(後述する第3の実施の形態における予測誤差算出モジュール3135)は、有効精度の仮数値の予測値を生成し予測誤差を算出するようにしてもよい。この処理によって、時間経過で同じ仮数値が連続する場合に、基本符号の符号量を削減できる。ここでは時間tにおける有効精度の仮数値の予測値p(t)を、式(6)で定義する。なお、予測値p(t)はある複数の有効精度の仮数値との誤差二乗和を最小にする値で定義するなど、別の算出方法を用いてもよい。
【数6】
有効精度の仮数値m1(t)と予測した有効精度の仮数値p(t)の時間tにおける予測誤差△m1(t)は式(7)で定義する。
【数7】
【0051】
式(7)より、予測誤差△m1(t)を
図15の例に示す。この構成では、仮数値m1(t)の代わりに予測誤差△m1(t)を符号化する。
図15は、予測誤差テーブル1500のデータ構造例を示す説明図である。
予測誤差テーブル1500は、時間[sec]欄1510、有効精度の仮数値の予測誤差欄1520を有している。時間[sec]欄1510は、時間[sec]を記憶している。有効精度の仮数値の予測誤差欄1520は、有効精度の仮数値の予測誤差を記憶している。
【0052】
第1の符号化モジュール135、第2の符号化モジュール140の処理、符号化データ(基本符号142、差分符号144)について説明する。第1の符号化モジュール135は、ブロック内最大指数値及び有効精度の仮数値を符号化した符号化データを基本符号142(
図16)として出力する。第2の符号化モジュール140は、無効精度の仮数値及び指数値残差を符号化した符号化データを差分符号144(
図17)として出力する。なお、有効精度の仮数値の予測を行う場合、基本符号はブロック内最大指数値及び有効精度の仮数値の予測誤差を符号化する(
図18)。基本符号及び差分符号は、それぞれハフマン符号や算術符号などの従来手法を用いて可逆で符号化する。
図16は、基本符号の符号化データ1600のデータ構造例(基本符号の符号化データの構造例(有効精度の仮数値の予測を行わない場合))を示す説明図である。基本符号の符号化データ1600は、ブロック内最大指数値1610と有効精度の仮数値1620により構成されている。
図17は、差分符号の符号化データ1700のデータ構造例(差分符号の符号化データの構造例)を示す説明図である。差分符号の符号化データ1700は、差分指数値1710と無効精度の仮数値1720により構成されている。
図18は、基本符号の符号化データ1800のデータ構造例(基本符号の符号化データの構造例(有効精度の仮数値の予測を行う場合))を示す説明図である。基本符号の符号化データ1800は、ブロック内最大指数値1810と有効精度の仮数値の予測誤差1820により構成されている。
【0053】
復号装置150による処理を説明する。
まず、有効精度のデータを取得する方法を説明する。第1の復号モジュール155は、時間tにおける基本符号を復号して、注目ブロックのブロック内最大指数値f’及び有効精度の仮数値m1’(t)を得る。時間tにおける指数値e’(t)及び仮数値m’(t)は、式(8)及び式(9)で定義される。
【数8】
【数9】
【0054】
有効精度の仮数値の予測誤差を符号化している場合は、時間tにおける予測値p’(t)及び基本符号を復号して得られる有効精度の仮数値の予測誤差△m1’(t)から仮数値m’(t)を計算する。予測値p’(t)及び仮数値m’(t)は式(10)及び式(11)で定義される。
【数10】
【数11】
式(10)及び式(11)より、注目ブロックの指数値e’(t)及び仮数値m’(t)を
図19の例、
図20の例に示す。
図19は、指数値テーブル1900のデータ構造例を示す説明図である。指数値テーブル1900は、時間[sec]欄1910、指数値欄1920を有している。時間[sec]欄1910は、時間[sec]を記憶している。指数値欄1920は、指数値を記憶している。
図20は、有効精度の仮数値テーブル2000のデータ構造例を示す説明図である。有効精度の仮数値テーブル2000は、時間[sec]欄2010、有効精度の仮数値欄2020を有している。時間[sec]欄2010は、時間[sec]を記憶している。有効精度の仮数値欄2020は、有効精度の仮数値を記憶している。
【0055】
第2の復号モジュール160、加算モジュール165による処理が不要である場合について説明する。
変換モジュール170は、ブロック内最大指数値及び有効精度の仮数値を浮動小数点数に変換する。時間t、有効数字N桁とする。時間tの浮動小数点数データをF’(t)とすると、 F’(t)は式(12)のように表す。
【数12】
式(12)より、有効精度のデータを
図21の例に示す。
図21は、有効精度データテーブル2100のデータ構造例を示す説明図である。有効精度データテーブル2100は、時間[sec]欄2110、X座標値[mm]欄2120を有している。時間[sec]欄2110は、時間[sec]を記憶している。X座標値[mm]欄2120は、X座標値[mm]を記憶している。
【0056】
ブロック統合モジュール175は、分割されたブロックを統合し、有効精度のデータを得る。入力データの有効精度の浮動小数点数データの伸長結果を
図22の例に示す。各ブロックの精度はe+03で統一されている。
図22は、有効精度データテーブル2200のデータ構造例を示す説明図である。有効精度データテーブル2200は、時間[sec]欄2210、X座標値[mm]欄2220を有している。時間[sec]欄2210は、時間[sec]を記憶している。X座標値[mm]欄2220は、X座標値[mm]を記憶している。
【0057】
次に、無効精度のデータを伸長する方法を説明する。前提として、第1の復号モジュール155によって基本符号を復号して有効精度のデータが得られているとする。
時間tにおける差分指数値を△e’’(t)及び無効精度の仮数値をm2’’(t)とする。第2の復号モジュール160は、差分符号144から差分指数値△e’’(t)及び無効精度の仮数値m2’’(t)を復元する。そして、加算モジュール165は、有効精度のデータに無効精度の差分指数値△e’’(t)及び無効精度の仮数値m2’’(t)を、加算モジュール165が加算することで、有効精度のデータの指数値e(t)’’と有効精度の仮数値m’’(t)を、式(13)と式(14)から復元する。
【数13】
【数14】
【0058】
式(13)及び式(14)より、注目ブロックの指数値e’’(t)及び仮数値m’’(t)を
図23の例、
図24の例に示す。
図23は、指数値テーブル2300のデータ構造例を示す説明図である。指数値テーブル2300は、時間[sec]欄2310、指数値欄2320を有している。時間[sec]欄2310は、時間[sec]を記憶している。指数値欄2320は、指数値を記憶している。
図24は、有効精度の仮数値テーブル2400のデータ構造例を示す説明図である。有効精度の仮数値テーブル2400は、時間[sec]欄2410、有効精度の仮数値欄2420を有している。時間[sec]欄2410は、時間[sec]を記憶している。有効精度の仮数値欄2420は、有効精度の仮数値を記憶している。
【0059】
変換モジュール170は、ブロック内最大指数値及び有効精度の仮数値を浮動小数点数に変換する。時間tの浮動小数点数データをF’’(t)とすると、F’’(t)は式(15)のように表す。式(15)より、無効精度のデータとして
図25の例が得られる。
【数15】
図25は、有効精度データテーブル2500(復号されたデータ)のデータ構造例を示す説明図である。有効精度データテーブル2500は、時間[sec]欄2510、X座標値[mm]欄2520を有している。時間[sec]欄2510は、時間[sec]を記憶している。X座標値[mm]欄2520は、X座標値[mm]を記憶している。
【0060】
ブロック統合モジュール175は、分割されたブロックを統合し、無効精度のデータを得る。入力データの無効精度の浮動小数点数データの復号結果を
図26の例に示す。
図26は、有効精度データテーブル2600(復号されたデータ)のデータ構造例を示す説明図である。有効精度データテーブル2600は、時間[sec]欄2610、X座標値[mm]欄2620を有している。時間[sec]欄2610は、時間[sec]を記憶している。X座標値[mm]欄2620は、X座標値[mm]を記憶している。
【0061】
本実施の形態と従来手法における圧縮伸長の違いを説明する。例えば、
図7のデータを可視化する場合と別の数値計算への入力を行う場合を考える。このとき、可視化にはe+03の精度までのデータが必要であり、数値計算には元データの精度まで必要であるとする。従来手法は入力データを可視化用にe+03の精度で圧縮伸長し、さらに数値計算用に元データの精度で圧縮伸長する必要がある。本実施の形態は、入力データを一度だけ圧縮すれば、再び圧縮を行うことなくe+03の精度も元データの精度のデータも伸長することができる。
【0062】
本実施の形態と従来手法の符号量の違いを説明する。例えば、入力データのブロック分割数を1とする。従来手法を用いた場合の符号化データの総符号量は、「有効精度の符号」の符号量と「無効精度の符号」の符号量との加算となり、本実施の形態を用いた場合の符号化データの総符号量は「基本符号142」の符号量と「差分符号144」の符号量との加算となる。ここで、「有効精度の符号」の符号量と「基本符号142」の符号量は、原理的に同じになる。一方で、「無効精度の符号」の符号量は入力データを全て符号化した符号化データであり、「差分符号144」の符号量は入力データの一部を符号化した符号化データである。そのため、「差分符号144」の符号量は「無効精度の符号」の符号量よりも小さくなる。よって、複数の精度でデータを圧縮伸長する場合、本実施の形態の符号化データの総符号量は、従来手法の符号化データの総符号量よりも小さくなる。
【0063】
<第2の実施の形態>
図27は、第2の実施の形態の構成例についての概念的なモジュール構成図である。
なお、前述の実施の形態と同種の部位には同一符号を付し重複した説明を省略する(以下、同様)。
符号化装置2700は、ブロック分割モジュール110、浮動小数点数分離モジュール115、ブロック内最大指数値算出モジュール120、差分指数値算出モジュール125、仮数値分割モジュール130、有効精度分割モジュール2735、第1−1の符号化モジュール2740、第1−2の符号化モジュール2745、第2の符号化モジュール140を有している。符号化装置2700は、符号化装置100に、有効精度分割モジュール2735、第1−2の符号化モジュール2745等を付加したものである。
【0064】
ブロック分割モジュール110は、浮動小数点数分離モジュール115と接続されており、浮動小数点数データ群105を受け付ける。
浮動小数点数分離モジュール115は、ブロック分割モジュール110、ブロック内最大指数値算出モジュール120、仮数値分割モジュール130と接続されている。
ブロック内最大指数値算出モジュール120は、浮動小数点数分離モジュール115、差分指数値算出モジュール125と接続されている。
差分指数値算出モジュール125は、ブロック内最大指数値算出モジュール120、仮数値分割モジュール130と接続されている。
仮数値分割モジュール130は、浮動小数点数分離モジュール115、差分指数値算出モジュール125、有効精度分割モジュール2735と接続されている。
有効精度分割モジュール2735は、仮数値分割モジュール130、第1−1の符号化モジュール2740、第1−2の符号化モジュール2745、第2の符号化モジュール140と接続されている。有効精度分割モジュール2735は、第1の仮数値を分割する。具体的には、有効精度分割モジュール2735は、有効精度を任意の精度に分割する。これによって、有効精度を複数の精度に分割することができるようになる。
第1−1の符号化モジュール2740は、有効精度分割モジュール2735と接続されており、基本符号1:2742を出力する。第1−1の符号化モジュール2740は、前述の予め定められた指数値と有効精度分割モジュール2735によって分割された最上位の仮数値を符号化する。具体的には、第1−1の符号化モジュール2740は、ブロック内最大指数値と分割された最低精度の有効精度の仮数値を符号化する。
第1−2の符号化モジュール2745は、有効精度分割モジュール2735と接続されており、基本符号m:2742−mを出力する。第1−2の符号化モジュール2745は、有効精度分割モジュール2735によって分割された最上位の仮数値以外の仮数値を符号化する。具体的には、第1−2の符号化モジュール2745は、有効精度の仮数値を符号化する。
第2の符号化モジュール140は、有効精度分割モジュール2735と接続されており、差分符号144を出力する。
【0065】
復号装置2750は、第1−1の復号モジュール2755、第1−2の復号モジュール2760、第2の復号モジュール160、加算モジュール165、変換モジュール170、ブロック統合モジュール175を有している。
第1−1の復号モジュール2755は、加算モジュール165と接続されており、基本符号1:2742を受け付ける。第1−1の復号モジュール2755は、符号化装置2700の第1−1の符号化モジュール2740によって符号化された予め定められた指数値と有効精度分割モジュール2735によって分割された最上位の仮数値を復号する。具体的には、第1−1の復号モジュール2755は、基本符号1:2742からブロック内最大指数値と分割された有効精度の仮数値の中で最低精度の仮数値を復号する。
第1−2の復号モジュール2760は、加算モジュール165と接続されており、基本符号m:2742−mを受け付ける。第1−2の復号モジュール2760は、符号化装置2700の第1−2の符号化モジュール2745によって符号化された有効精度分割モジュール2735によって分割された最上位の仮数値以外の仮数値を符号化する。具体的には、第1−2の復号モジュール2760は、基本符号m:2742−mから分割された有効精度の仮数値の中で最低精度以外の仮数値を復号する。
第2の復号モジュール160は、加算モジュール165と接続されており、差分符号144を受け付ける。
加算モジュール165は、第1−1の復号モジュール2755、第1−2の復号モジュール2760、第2の復号モジュール160、変換モジュール170と接続されている。
変換モジュール170は、加算モジュール165、ブロック統合モジュール175と接続されている。
ブロック統合モジュール175は、変換モジュール170と接続されており、浮動小数点数データ群195を出力する。
【0066】
図28は、第2の実施の形態による処理例を示す説明図である。
有効精度分割モジュール2735は、有効精度の仮数値分割モジュール2835を有している。
有効精度の仮数値分割モジュール2835は、第1−1の符号化モジュール2740、第1−2の符号化モジュール2745と接続されている。有効精度の仮数値分割モジュール2835は、N桁の有効精度の仮数値2810を受け付け、そのN桁の有効精度の仮数値2810をk(2≦k≦M)個に分割し、第1の仮数値2837を第1−1の符号化モジュール2740に渡し、第m(m=1…k)の仮数値2839を第1−2の符号化モジュール2745に渡す。
第1−1の符号化モジュール2740は、有効精度分割モジュール2735の有効精度の仮数値分割モジュール2835と接続されており、有効精度の仮数値分割モジュール2835から第1の仮数値2837を受け取り、基本符号1:2742を出力する。
第1−2の符号化モジュール2745は、有効精度分割モジュール2735の有効精度の仮数値分割モジュール2835と接続されており、有効精度の仮数値分割モジュール2835から第m(m=1…k)の仮数値2839を受け取り、基本符号2:2842−2、基本符号3:2842−3、基本符号k−1:2842−k−1、基本符号k:2842−kを出力する。
【0067】
符号化装置2700は、符号化装置100に、有効精度を任意の精度に分割する有効精度分割モジュール2735を加えたものである。有効精度を複数の精度に分割して符号化することで、ユーザーは用途に応じて必要な精度を取得することができる。有効精度の仮数値の有効桁数をMとする。有効精度の仮数値を任意の精度でk(2≦k≦M)個に分割し、基本符号m(m=1…k)を生成する。ここで、分割された有効精度の仮数値を精度が低い方から順番に第mの仮数値と呼ぶことにする。基本符号1:2742は、ブロック内最大指数値と第1の仮数値の符号化データで構成される。例えば、
図29に示す基本符号1の符号化データ2900は、基本符号1:2742のデータ構造を示しており、ブロック内最大指数値2910と第1番目の仮数値2920により構成されている。基本符号m:2742−m(m≧2)は、第mの仮数値の符号化データで構成される。例えば、
図30に示す基本符号m(m≧2)の符号化データ3000は、基本符号m:2742−mのデータ構造を示している。基本符号mは、ハフマン符号や算術符号などの従来手法を用いて可逆で符号化する。これにより、復号装置2750は、基本符号1:2742で復号した有効精度のデータを伸長した後に、基本符号m:2742−m(m≧2)を加算することで、再符号化せずにより高い精度のデータを段階的に伸長することができる。
【0068】
<第3の実施の形態>
図31は、第3の実施の形態の構成例についての概念的なモジュール構成図である。
符号化装置3100は、ブロック分割モジュール110、浮動小数点数分離モジュール115、ブロック内最大指数値算出モジュール120、差分指数値算出モジュール125、仮数値分割モジュール130、予測誤差算出モジュール3135、第1−aの符号化モジュール3140、第2の符号化モジュール140を有している。符号化装置3100は、符号化装置100に予測誤差算出モジュール3135を付加したものである。第1の実施の形態の説明で、式(6)、式(7)、
図15、
図18の例を用いて説明した処理を行うものである。
ブロック分割モジュール110は、浮動小数点数分離モジュール115と接続されており、浮動小数点数データ群105を受け付ける。
浮動小数点数分離モジュール115は、ブロック分割モジュール110、ブロック内最大指数値算出モジュール120、仮数値分割モジュール130と接続されている。
ブロック内最大指数値算出モジュール120は、浮動小数点数分離モジュール115、差分指数値算出モジュール125と接続されている。
差分指数値算出モジュール125は、ブロック内最大指数値算出モジュール120、仮数値分割モジュール130と接続されている。
仮数値分割モジュール130は、浮動小数点数分離モジュール115、差分指数値算出モジュール125、予測誤差算出モジュール3135と接続されている。
予測誤差算出モジュール3135は、仮数値分割モジュール130、第1−aの符号化モジュール3140、第2の符号化モジュール140と接続されている。予測誤差算出モジュール3135は、第1の仮数値又は第2の仮数値と予測値との誤差を算出する。具体的には、予測誤差算出モジュール3135は、有効精度の仮数値と予測値との予測誤差を算出する。これによって、データ列で同じ仮数値が連続する場合に圧縮率を高くすることができる。
第1−aの符号化モジュール3140は、予測誤差算出モジュール3135と接続されており、基本符号a3142を出力する。第1−aの符号化モジュール3140は、予め定められた指数値と予測誤差算出モジュール3135によって算出された誤差を符号化する。具体的には、第1−aの符号化モジュール3140は、ブロック内最大指数値と予測誤差を符号化する。
第2の符号化モジュール140は、予測誤差算出モジュール3135と接続されており、差分符号144を出力する。第2の符号化モジュール140は、予測誤差算出モジュール3135によって算出された誤差を符号化する。
【0069】
復号装置3150は、第1−aの復号モジュール3155、第2の復号モジュール160、有効精度の仮数値復元モジュール3160、加算モジュール165、変換モジュール170、ブロック統合モジュール175を有している。
第1−aの復号モジュール3155は、有効精度の仮数値復元モジュール3160と接続されており、基本符号a3142を受け付ける。第1−aの復号モジュール3155は、符号化装置3100の第1−aの符号化モジュール3140によって符号化された予め定められた指数値と予測誤差算出モジュール3135によって算出された誤差を復号する。具体的には、第1−aの復号モジュール3155は、基本符号a:3142からブロック内最大指数値と予測誤差を復号する。
有効精度の仮数値復元モジュール3160は、第1−aの復号モジュール3155、加算モジュール165と接続されている。有効精度の仮数値復元モジュール3160は、予測誤差から有効精度の仮数値を復元する。
第2の復号モジュール160は、加算モジュール165と接続されており、差分符号144を受け付ける。
加算モジュール165は、有効精度の仮数値復元モジュール3160、第2の復号モジュール160、変換モジュール170と接続されている。
変換モジュール170は、加算モジュール165、ブロック統合モジュール175と接続されている。
ブロック統合モジュール175は、変換モジュール170と接続されており、浮動小数点数データ群195を出力する。
【0070】
図32は、第3の実施の形態による処理例を示す説明図である。
予測誤差算出モジュール3135は、第1−aの符号化モジュール3140と接続されており、有効精度の仮数値3210を受け付ける。
第1−aの符号化モジュール3140は、予測誤差算出モジュール3135と接続されており、基本符号a3142を出力する。
予測誤差算出モジュール3135は、有効精度の仮数値と予測値との予測誤差を算出する。予測値の生成方法としては、例えば符号化済みの有効精度の仮数値を予測値として用いる方法や、複数の符号化済みの有効精度の仮数値との誤差二乗和を最小にする値を予測値として用いる方法等を用いればよい。予測誤差は、ハフマン符号や算術符号などの従来手法を用いて可逆で符号化する。データの特徴に応じて適切な予測方法を用いれば、圧縮率を高くすることができる。
【0071】
<第4の実施の形態>
図33は、第4の実施の形態の構成例についての概念的なモジュール構成図である。
前述の実施の形態では、ブロック分割モジュール110によって浮動小数点数データ群105を分割したが、必ずしもブロックに分割する必要はない。対象とする浮動小数点数データ群105内で、予め定められた指数値(例えば、最大の指数値等)を抽出できればよい。
【0072】
符号化装置3300は、浮動小数点数分離モジュール115、最大指数値算出モジュール3320、差分指数値算出モジュール125、仮数値分割モジュール130、第1の符号化モジュール135、第2の符号化モジュール140を有している。
浮動小数点数分離モジュール115は、最大指数値算出モジュール3320、仮数値分割モジュール130と接続されおり、浮動小数点数データ群105を受け付ける。
最大指数値算出モジュール3320は、浮動小数点数分離モジュール115、差分指数値算出モジュール125と接続されている。最大指数値算出モジュール3320は、対象とする浮動小数点数データ群105内で、最大の指数値を抽出する。
差分指数値算出モジュール125は、最大指数値算出モジュール3320、仮数値分割モジュール130と接続されている。
仮数値分割モジュール130は、浮動小数点数分離モジュール115、差分指数値算出モジュール125、第1の符号化モジュール135、第2の符号化モジュール140と接続されている。
第1の符号化モジュール135は、仮数値分割モジュール130と接続されており、基本符号142を出力する。
第2の符号化モジュール140は、仮数値分割モジュール130と接続されており、差分符号144を出力する。
【0073】
復号装置3350は、第1の復号モジュール155、第2の復号モジュール160、加算モジュール165、変換モジュール170を有している。
第1の復号モジュール155は、加算モジュール165と接続されており、基本符号142を受け付ける。
第2の復号モジュール160は、加算モジュール165と接続されており、差分符号144を受け付ける。
加算モジュール165は、第1の復号モジュール155、第2の復号モジュール160、変換モジュール170と接続されている。
変換モジュール170は、加算モジュール165と接続されており、浮動小数点数データ群195を出力する。
【0074】
図34は、第4の実施の形態(符号化装置3300)による処理例を示すフローチャートである。
ステップS3402では、浮動小数点数分離モジュール115は、指数値eと仮数値mを分離する。
ステップS3404では、最大指数値算出モジュール3320は、最大指数値fを算出する。
ステップS3406では、差分指数値算出モジュール125は、差分指数値△eを算出する。
ステップS3408では、仮数値分割モジュール130は、仮数値mを分割する。ステップS3408の詳細な処理内容については、
図4の例に示すフローチャートを用いて前述した。
ステップS3410では、第1の符号化モジュール135は、圧縮Aによる基本データの符号化を行う。
ステップS3412では、第2の符号化モジュール140は、圧縮Bによる差分データの符号化を行う。
図34の例に示すフローチャートは、
図3の例に示すフローチャートのステップS302を削除し、ステップS306をステップS3404に修正したものである。
【0075】
図35は、第4の実施の形態(復号装置3350)による処理例を示すフローチャートである。
ステップS3502では、第1の復号モジュール155は、伸長Aによる基本データの復号を行う。
ステップS3504では、第2の復号モジュール160は、伸長Bによる符号データの復号を行う。
ステップS3506では、加算モジュール165は、データを加算する。
ステップS3508では、変換モジュール170は、浮動小数点数を生成する。
図35の例に示すフローチャートは、
図5の例に示すフローチャートのステップS510を削除したものである。
【0076】
なお、本実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、
図36に例示するように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。つまり、具体例として、処理部(演算部)としてCPU3601を用い、記憶装置としてRAM3602、ROM3603、HD3604を用いている。HD3604として、例えばハードディスク、SSD(Solid State Drive)を用いてもよい。ブロック分割モジュール110、浮動小数点数分離モジュール115、ブロック内最大指数値算出モジュール120、差分指数値算出モジュール125、仮数値分割モジュール130、第1の符号化モジュール135、第2の符号化モジュール140、第1の復号モジュール155、第2の復号モジュール160、加算モジュール165、変換モジュール170、ブロック統合モジュール175、有効精度分割モジュール2735、第1−1の符号化モジュール2740、第1−2の符号化モジュール2745、第1−2の復号モジュール2760、有効精度の仮数値分割モジュール2835、予測誤差算出モジュール3135、第1−aの符号化モジュール3140、第1−aの復号モジュール3155、有効精度の仮数値復元モジュール3160等のプログラムを実行するCPU3601と、そのプログラムやデータを記憶するRAM3602と、本コンピュータを起動するためのプログラム等が格納されているROM3603と、符号化対象である浮動小数点数データ群105、基本符号142、差分符号144、復号された浮動小数点数データ群195を記憶する補助記憶装置(フラッシュ・メモリ等であってもよい)であるHD3604と、キーボード、マウス、タッチスクリーン、マイク等に対する利用者の操作に基づいてデータを受け付ける受付装置3606と、CRT、液晶ディスプレイ、スピーカー等の出力装置3605と、ネットワークインタフェースカード等の通信ネットワークと接続するための通信回線インタフェース3607、そして、それらをつないでデータのやりとりをするためのバス3608により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
【0077】
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、
図36に示すハードウェア構成は、1つの構成例を示すものであり、本実施の形態は、
図36に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア(例えば特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)等)で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続している形態でもよく、さらに
図36に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、携帯情報通信機器(携帯電話、スマートフォン、モバイル機器、ウェアラブルコンピュータ等を含む)、情報家電、ロボット、複写機、ファックス、スキャナ、プリンタ、複合機(スキャナ、プリンタ、複写機、ファックス等のいずれか2つ以上の機能を有している画像処理装置)などに組み込まれていてもよい。
【0078】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通等のために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク(DVD)であって、DVDフォーラムで策定された規格である「DVD−R、DVD−RW、DVD−RAM等」、DVD+RWで策定された規格である「DVD+R、DVD+RW等」、コンパクトディスク(CD)であって、読出し専用メモリ(CD−ROM)、CDレコーダブル(CD−R)、CDリライタブル(CD−RW)等、ブルーレイ・ディスク(Blu−ray(登録商標) Disc)、光磁気ディスク(MO)、フレキシブルディスク(FD)、磁気テープ、ハードディスク、読出し専用メモリ(ROM)、電気的消去及び書換可能な読出し専用メモリ(EEPROM(登録商標))、フラッシュ・メモリ、ランダム・アクセス・メモリ(RAM)、SD(Secure Digital)メモリーカード等が含まれる。
そして、前記のプログラムの全体又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク(LAN)、メトロポリタン・エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、又は無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分又は全部であってもよく、又は別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化等、復元可能であればどのような態様で記録されていてもよい。