(57)【要約】【課題】浮動小数点数の逆数演算を高精度かつ高速で処理すること。【解決手段】本発明は、浮動小数点形式で表現された除数の入力を受け付ける入力部１０４と、入力部１０４に入力された除数を記憶する記憶部と、記憶部に記憶された除数を整数配列を使用して表現し、整数配列の逆数を計算し、計算した逆数を浮動小数点数形式に変換する演算部と、演算部の演算結果を出力する出力部１０５と、を有することを特徴とする。【選択図】図２
2007257225.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点形式で表現された除数の入力を受け付ける入力部と、
前記入力部に入力された前記除数を記憶する記憶部と、
前記記憶部に記憶された前記除数を整数配列を使用して表現し、前記整数配列の逆数を計算し、計算した逆数を浮動小数点数形式に変換する演算部と、
前記演算部の演算結果を出力する出力部と、
を有することを特徴とする計算装置。
【請求項２】
前記入力部は、除算における前記除数に対応する被除数を入力し、
前記演算部は、前記演算部の演算結果である逆数および前記被除数の積を計算し、
前記出力部は、前記積を除算結果として出力すること
を特徴とする請求項１に記載の計算装置。
【請求項３】
入力部、記憶部、演算部、および、出力部を有する計算装置による計算方法であって、
前記入力部が、浮動小数点形式で表現された除数の入力を受け付ける手順と、
前記記憶部が、前記入力部に入力された前記除数を記憶する手順と、
前記演算部が、前記記憶部に記憶された前記除数を整数配列を使用して表現し、前記整数配列の逆数を計算し、計算した逆数を浮動小数点数形式に変換する手順と、
前記出力部が、前記演算部の演算結果を出力する手順と、
を実行することを特徴とする計算方法。
【請求項４】
前記入力部は、除算における前記除数に対応する被除数を入力し、
前記演算部は、前記演算部の演算結果である逆数および前記被除数の積を計算し、
前記出力部は、前記積を除算結果として出力すること
を特徴とする請求項３に記載の計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算装置、および、計算方法に関する。
【背景技術】
【０００２】
例えば、ＩＥＥＥ（Institute of Electrical and Electronics Engineers）７５４では、単精度および倍精度について浮動小数点形式を規定している。単精度とは、１つの数値を３２ビット（符号部１ビット、指数部８ビット、仮数部２３ビット）で表現するものであり、倍精度とは、１つの数値を６４ビット（符号部１ビット、指数部１１ビット、仮数部５２ビット）で表現するものである。また、倍精度に対する拡張形式（拡張倍精度形式：符号部１ビット、指数部１１ビット、仮数部６４ビット以上）が演算に用いられる場合もある。
【０００３】
このように、ＩＥＥＥ７５４では拡張形式の浮動小数点形式が規定されているが、これらの規格に準拠している浮動小数点数を用いた除算では、仮数部のビット数により、反復回数を定め、そのビット数に応じた乗算、加減算処理を行う必要がある。ＩＥＥＥ７５４規格の詳細は、非特許文献１に記載されている。
【０００４】
浮動小数点除算で使用する逆数演算の結果を得るためのものとして、いくつかの装置が提案されている。例えば、特許文献１では、逆数を求めるのに、あるタイプの補間方法を使用して逆数の初期近似を得、次いでこの近似に基づいて反復方法を使用する装置が開示されている。
【０００５】
また、特許文献２では、除数が固定ビット数の場合の固定小数点除算を求める装置が、開示されている。
【特許文献１】特開２００２−２４４８４３号公報（段落００３１〜段落００４１、図１）
【特許文献２】特開平０９−０６２４９０号公報（段落００２２〜段落００３２、図１）
【非特許文献１】IEEE，“IEEE Standard for binary Floating−Point Arithmetic”，ANSI／IEEE Standard754−1985. IEEE,New York,1985.Reprinted in SIGPLAN Notices 22（2）,9−25,1987.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
浮動小数点数の除算（Ａ／Ｂ）は、１回の逆数演算（１／Ｂ）と、１回の乗算（Ａ＊１／Ｂ）とから成り立っている。浮動小数点数除算、特に、拡張精度での除算は、一般に他の演算に比較し性能が５〜１０倍低いこと、定められたビット数のみしか無いなどの問題がある。
【０００７】
高精度な浮動小数点数除算を実施する場合、仮数部のビット数に応じて、反復回数を定めるが、浮動小数点数の値により反復回数が異なるため、乗算、加減算を実行する回数が多くなる。このため、逆数演算で必要精度求め、加減算をなくし、乗算は常に１回で行う様にして、性能の向上と、値に依存しない性能の安定化が重要である。
【０００８】
特許文献１および特許文献２では、付加的な専用ハードウエアを準備しなければならず、科学技術計算を行う計算機機種毎に専用ハードウエアが必要になる。特許文献１では、逆数の初期値を補間方法を用いて求めるため、その為のテーブルが必要であり、また、反復法により求めているため、テーブルサイズの問題、既存のものにはないビット数での加減算が必要になる。
【０００９】
特許文献２では、除数が固定ビットしかできない。浮動小数点数の逆数を求める場合は、整数除算に置き換える方法では、除数も可変長にしなければ、反復法を使用しなければならなくなる。
【００１０】
そこで、本発明は、前記問題点に鑑みてなされたものであり、浮動小数点数の逆数演算を高精度かつ高速で処理することを、主な目的とする。
【課題を解決するための手段】
【００１１】
前記課題を解決するために、本発明は、浮動小数点形式で表現された除数の入力を受け付ける入力部と、前記入力部に入力された前記除数を記憶する記憶部と、前記記憶部に記憶された前記除数を整数配列を使用して表現し、前記整数配列の逆数を計算し、計算した逆数を浮動小数点数形式に変換する演算部と、前記演算部の演算結果を出力する出力部と、を有することを特徴とする。その他の手段については、後記する。
【発明の効果】
【００１２】
本発明によれば、浮動小数点数の逆数演算について、整数配列を用いることにより高精度に計算でき、かつ、反復法を用いないために高速で計算することができる。浮動小数点数の逆数演算は、例えば、ＩＥＥＥ７５４の拡張倍精度形式であり、符号部１ビット、指数部１５ビット、仮数部１１２＋３２ｐビット（ｐは正整数）で行われる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明に係るデータ処理装置（演算装置）について、適宜図面を参照しながら説明する。
【００１４】
まず、図１を参照しながら、データ処理装置の構成について説明する。データ処理装置１は、補助記憶装置１０１、メモリ１０２（記憶部）、処理部としてのＣＰＵ１０３（Central Processing Unit）、入力部１０４、出力部１０５および入出力インターフェイス１０６を備えて構成される。補助記憶装置１０１は、各種情報を記憶するものであり、例えば、ハードディスク、ＲＯＭ（Read Only Memory）などにより実現される。補助記憶装置１０１は、プログラム１１１、コンパイラ１１２および実行モジュール１１３を記憶している。
【００１５】
プログラム１１１は、図２で示すフローチャート上の処理が記述されているプログラム１１１（ソースプログラム）である。コンパイラ１１２は、プログラム１１１をコンパイル・リンクするものである。実行モジュール１１３は、コンパイラ１１２によって、コンパイル・リンクされるモジュールである。
【００１６】
メモリ１０２は、各種情報を記憶する一時記憶手段であり、たとえばＲＡＭ（Random Access Memory）により実現される。ＣＰＵ１０３は、各種演算処理を行うものであり、メモリ１０２、入出力インターフェイス１０６を介して実行モジュール１１３を実行する役割を果たす。入力部１０４は、各種実行コマンドなどを入力する入力装置である。出力部１０５は、各種実行結果などを出力する出力する出力装置である。入出力インターフェイス１０６は、図１に示すように、各構成間の入出力インターフェイスの役割を果たすものである。
【００１７】
データ処理装置１は、次のように動作する。まず、操作者により、入力部１０４から入力されたコンパイルコマンドは、入出力インターフェイス１０６を介して、メモリ１０２にストアされる。メモリ１０２では、補助記憶装置１０１のプログラム１１１が、コンパイラ１１２によってコンパイル・リンクされ、機械語コードである実行モジュール１１３が生成される。
【００１８】
次に、操作者により、入力部１０４から実行コマンドが入力されると、ＣＰＵ１０３がメモリ１０２に実行モジュール１１３をロードする。実行モジュール１１３がメモリ１０２にロードされると、ＣＰＵ１０３によって、各処理がメモリ１０２からＣＰＵ１０３に逐次呼び出され、各処理が実行された後、その実行結果がメモリ１０２にストアされる。メモリ１０２にストアされた実行結果は、ＣＰＵ１０３によって、入出力インターフェイス１０６を介して、出力部１０５に出力される。
【００１９】
続いて、図２を参照しながら、データ処理装置の精度保証処理について説明する（適宜図１参照）。図２は、データ処理装置の全体的な精度保証処理を示したフローチャートである。図２のメイン処理は、図３〜図８に示すサブルーチンを呼び出す。
【００２０】
なお、図２の処理は、浮動小数点のデータＡを入力すると、その逆数（データＢ＝１／データＡ）を計算する。そして、浮動小数点の除算演算（データＣ÷データＡ）は、データＣと逆数（１／データＡ）との積で計算される。以下、記号「＊」について、Ａ＊ＢはＡとＢとの積を示す。記号「＊＊」について、Ａ＊＊ＢはＡのＢ乗を示す。
【００２１】
ここでは、浮動小数点除算の除数Ａとその逆数浮動小数点数をＢとし、ＩＥＥＥ７５４に準拠した浮動小数点数が符号部１ビット、指数部１５ビット、仮数部ｍ＝１１２＋３２＊Ｐ（Ｐは正整数）ビットで表現される場合を例として説明する。また、除数Ａ＝０の場合は、このデータ処理装置を使用する前に処理が施されるため、除数Ａ≠０のケースで説明する。
【００２２】
ＣＰＵ１０３は、入力処理（Ｓ２０１）、整数変換処理（Ｓ２０２）、特異値処理（Ｓ２０３）、整数除算処理（Ｓ２０４）、浮動小数点変換処理（Ｓ２０５）、出力処理（Ｓ２０６）を順に実行する。なお、Ｓ２０３の特異値とは、整数配列ＩＸの先頭配列ＩＸ（Ｌ）の値が、２＊＊ｎで、ＩＸ（Ｌ−１）、ＩＸ（Ｌ−２）、…の値が０の場合をいう。
【００２３】
図３は、図２のＳ２０１の入力処理の詳細を示すフローチャートである。ＣＰＵ１０３は、データＡを入力する（Ｓ３０１）。具体的には、ＣＰＵ１０３は、操作者により入力部１０４から入力されたデータＡをメモリ１０２にロードさせる。
【００２４】
図４は、図２のＳ２０２の整数変換処理の詳細を示すフローチャートである。
【００２５】
ＣＰＵ１０３は、仮数部のビット数ｍから、整数配列ＩＸにおける要素数Ｌ、および、ビット数ｎを計算する（Ｓ４０１）。整数配列ＩＸの先頭要素は、ＩＸ（Ｌ）である。整数配列ＩＸは、各配列要素が３２ビット長である。ビット数ｎは、各配列要素に格納される値のとりうる範囲をカバーするビット長であり、１〜３２（配列要素の上限）のいずれかの値となる。具体的には、以下の（１）および（２）を同時に満たすように、Ｓ４０１の各パラメータを計算する。記号「；」は、数式と数式との区切りを示す。
（１）ｍｏｄ（ｍ、ｎ）＞０；ｎ−ｋ≧５
（２）Ｌ＊２＊＊２ｎ≦２＊＊６２−１；Ｌ＝ｍ／ｎ＋１
【００２６】
ＣＰＵ１０３は、浮動小数点数データＡの符号部および指数部を整数配列ＩＸに格納する（Ｓ４０２）。具体的には、以下の（１）〜（３）の代入演算を行う。記号「←」は、矢印の先の変数に、矢印の元の値を代入する旨を示す。
（１）ｉｓｉｇｎ←Ａの符号部
（２）ｉｔ←−（Ａの指数部から計算される２のべき乗数）−１
（３）整数配列ＩＸ（Ｌ）←Ａの符号部１ビットおよびＡの指数部１５ビットについて、「００００ ００００ ００００ ０００１」にした値
【００２７】
図５は、図２のＳ２０３の特異値処理の詳細を示すフローチャートである。ＣＰＵ１０３は、条件「Ａ＝±２＊＊ｍ」を満たすか否かを判定し（Ｓ５０１）、満たすとき（Ｓ５０１，Ｙｅｓ）はＳ５０２を実行し、満たさないとき（Ｓ５０１，Ｎｏ）はＳ５０３を実行する。
【００２８】
ＣＰＵ１０３は、「Ｂ←Ａの逆数」の代入処理を実行する（Ｓ５０２）。つまり、式「Ｂ←±２＊＊（−ｉｔ）」を計算する。そして、処理をＳ２０６に移行する。
【００２９】
ＣＰＵ１０３は、条件「ＩＸ（Ｌ）＝２＊＊ｎ，ＩＸ（Ｌ−１）＝０，…，ＩＸ（２）＝０」を満たすか否かを判定し（Ｓ５０３）、満たすとき（Ｓ５０３，Ｙｅｓ）はＳ５０４を実行し、満たさないとき（Ｓ５０３，Ｎｏ）はＳ２０５を実行する。
【００３０】
ＣＰＵ１０３は、ｊ＝Ｌの場合には代入処理「ＩＹ（ｊ）←２＊＊（ｎ＋１）−１」を、ｊ≠Ｌの場合には代入処理「ＩＹ（ｊ）←２＊＊ｎ−１」を、実行する。そして、ＣＰＵ１０３は、代入処理「ｊ←ｊ−１」を実行する（Ｓ５０４）。なお、整数配列ＩＹは、演算結果の格納に使用される。そして、処理をＳ５０３に移行する。
【００３１】
図６は、図２のＳ２０４の整数除算処理の詳細を示すフローチャートである。図６の整数除算処理は、以下の式１を計算する処理である。
【数１】
2007257225.tif 000003
【００３２】
ＣＰＵ１０３は、割られる数２＊＊（２ｎ＋１）を割る数（２＊＊ｎ＋ＩＸ（Ｌ））で割り、商（２＊＊ｎ＋ＩＹ（Ｌ））および剰余ｄ（Ｌ）を求める（Ｓ６０１）。なお、割られる数は被除数であり、割る数は除数である。
【００３３】
ＣＰＵ１０３は、既知のＩＸ、ＩＹの要素ｄの要素を使用して、順次、ＩＹおよびｄの要素の値をＩＹ（１）およびｄ（１）まで求める。この際、ＩＹ（ｊ）の値が負になると、すでに求めたＩＹ（ｊ＋１）、…を修正して、ＩＹ（ｊ）の値が負にならないようにする（Ｓ６０２）。以下、（１）〜（６）においてＳ６０２の詳細を説明する。
（１）２＊＊ｎ＊ｄ（Ｌ）＝（２＊＊ｎ＋ＩＸ（Ｌ））＊ＩＹ（Ｌ−１）＋ＩＸ（Ｌ−１）＊（２＊＊ｎ＋ＩＹ（Ｌ））＋ｄ（Ｌ−１）
（２）ＩＹ（Ｌ−１）＜０を判定し、Ｙｅｓなら後記（３）へ、Ｎｏなら後記（４）へ
（３）ＩＹ（Ｌ）＝ＩＹ（Ｉ）−１；前記（１）へ
（４）以下の式２の計算
【数２】
2007257225.tif 000004
（５）ＩＹ（Ｌ−ｋ−１）＜０を判定し、Ｙｅｓなら計算完了、Ｎｏなら後記（６）へ
（６）ＩＹ（Ｌ−ｋ）＝ＩＹ（Ｌ−ｋ）−１；後記（４）へ
【００３４】
ＣＰＵ１０３は、求めたＩＸ，ＩＹ，ｄ（１）による評価式ｅを求め、ｅの値が０または正になるまでＩＹ（１）を修正する（Ｓ６０３）。以下、（１）〜（３）においてＳ６０３の詳細を説明する。
（１）以下の式３の計算
【数３】
2007257225.tif 000005
（２）ｅ＜０を判定し、Ｙｅｓなら計算完了、Ｎｏなら後記（３）へ
（３）ＩＹ（１）＝ＩＹ（１）−１；前記（１）へ
【００３５】
ＣＰＵ１０３は、ＩＹの要素が２＊＊ｎになる場合があるため、ＩＹの要素がすべて０〜２＊＊ｎ−１になるようにＩＹの配列要素を再構成する（Ｓ６０４）。
【００３６】
図７は、図２のＳ２０５の浮動小数点変換処理の詳細を示すフローチャートである。ＣＰＵ１０３は、ＩＹ（１）のビット位置ｎ−ｋ−１で丸めを行う（Ｓ７０１）。
【００３７】
ＣＰＵ１０３は、以下の（１）および（２）の代入処理を実行する（Ｓ７０２）。
（１）Ｂの指数部←２＊＊（−ｉｔ−１）
（２）Ｂの仮数部←ＩＹ（Ｌ）のビット位置ｎ−１から、ＩＹ（Ｌ−１），ＩＹ（Ｌ−２），…，ＩＹ（１）でｍビット
【００３８】
ＣＰＵ１０３は、条件「Ｂの符号が正」を満たすか否かを判定し（Ｓ７０３）、満たすとき（Ｓ７０３，Ｙｅｓ）はＳ２０６を実行し、満たさないとき（Ｓ７０３，Ｎｏ）はＳ７０４を実行する。なお、ｉｓｉｇｎ＝０なら、Ｂの符号が正である。ＣＰＵ１０３は、Ｂの先頭ビットを負（１）とする（Ｓ７０４）。Ｂの先頭ビットは、符号部を示す。
【００３９】
図８は、図２のＳ２０６の出力処理の詳細を示すフローチャートである。ＣＰＵ１０３は、Ｂを出力する（Ｓ８０１）。Ｂは、逆数（１／Ａ）である。そして、ＣＰＵ１０３は、被除数Ｃの入力を受け付け、被除数Ｃと逆数Ｂとの乗算をすることにより、乗算Ｃ／Ａを計算する。
【００４０】
以上説明した図２の各処理を行うことで、多倍長除算の除数の逆数が精度良く、高速に得ることが可能となる。また、逆数を得ることにより、高精度な浮動小数点演算を必要とする産業（例えば、ニューラルネットワーク、敏感な数値シミュレーションを必要とする物理学分野）に本発明を応用することができる。
【００４１】
続いて、多倍長除算における除数の逆数算出の具体例について説明する（適宜各図参照）。データ処理装置１が演算で使用する浮動小数点数については、符号部１ビット、指数部１５ビット、仮数部１７６ビットとする。
【００４２】
前記条件のもとで、浮動小数点数Ａ、Ｂを次のように設定する。
ａ＝３．０
ｂ＝１．０／ａ
【００４３】
ここで、浮動小数点数Ｂにおける符号部とおよび指数部は００１１ １１１１ １１１１ １１０１となる。仮数部は ０１０１ ０１０１ … と同じパターンが４４個続くものとなる。
１／３＝２＊＊（−２）＊（１＋２＊＊（−２）＋２＊＊（−４）＋…＋２＊＊（−１７６））
【００４４】
まず、入力処理Ｓ２０１により、Ｓ３０１のように、入力装置１０４からデータを入力する。その結果、ａ＝３．０と初期化される。
【００４５】
整数変換処理Ｓ２０２ではＳ４０１で、以下の（１）および（２）により、整数配列ＩＸ，ＩＹの要素数は７、各要素が使用するビット数は２８ビット、丸めを行うのは、ＩＹ（１）のビット位置２８−８−１＝１９となる。
（１）ｍｏｄ（１７６，２８）＝８；２８−８＝２０>５
（２）７＊２＊＊（２＊２８）＜２＊＊６２−１；Ｌ＝ｍ／ｎ＋１＝７
【００４６】
Ｓ４０２では、ｉｓｉｇｎ＝０、ｉｔ＝−１−１＝−２、ＩＸの値は、ＩＸ（７）＝４０２６５３１８４＝２＊＊２８＋２＊＊２７となる。ＩＸ（６）＝ＩＸ（５）＝ＩＸ（４）＝ＩＸ（３）＝ＩＸ（２）＝ＩＸ（１）＝０となる。
【００４７】
ＩＸ（７）の値は、浮動小数点数３．０は、０１００ ００００ ００００ ００００ １００００ ０が１７５個続く値となっているため、整数変換した場合、１１０ ０ が１７５個続くことによる。
【００４８】
特異値処理Ｓ２０３では、３．０は仮数部の先頭ビットが１なので２のべき乗ではなく、ＩＸ（７）≠２＊＊２８のため、処理は何もなされない。
【００４９】
整数除算処理Ｓ２０４におけるＳ６０１では、ＩＹ（７）＝３５７９１３９４１で２＊＊２８＋８９４７８４８５、ｄ（７）＝１３４２１７７２８となる。ここで、８９４７８４８５をビットで表現すると、０１０１ ０１０１ ０１０１ １０１０ ０１０１ ０１０１ ０１０１、１３４２１７７２８をビットで表現すると、２＊＊２７となる。
【００５０】
図９は、計算時の整数配列の値を示す説明図である。図９は、Ｓ６０２を実行した時のＩＹおよびｄの値を示している。ＩＹ（６）計算時には、２＊＊２８＊（２＊＊２７）−ＩＸ（６）＊３５７９１３９４１＞０、ＩＸ（６）＝０より。このため、ＩＹ（６）＞０より、Ｓ６０２の条件（２）ＩＹ（Ｌ−１）＜０は成立しない。
【００５１】
Ｓ６０３の（１）で評価式ｅを計算すると、ＩＸ（６）＝ＩＸ（５）＝ＩＸ（４）＝ＩＸ（３）＝ＩＸ（２）＝ＩＸ（１）＝０より、ｅ＝２＊＊２８＊ｄ（１）＞０より、補正はない。ＩＹ（６）、ＩＹ（５）、ＩＹ（４）、ＩＹ（３）、ＩＹ（２）、ＩＹ（１）は２＊＊２８−１以下のため、Ｓ６０４の再構成の必要はない。
【００５２】
浮動小数点変換処理Ｓ２０５では、ＩＹ（１）をビット表示すると「０１０１ ０１０１ ０１０１ ０１０１ ０１０１ ０１０１ ０１０１」となる。ＩＹ（１）のビット位置２８−８−１＝１９は０より、Ｓ７０１では丸めは行われない。
【００５３】
Ｓ７０２では、Ｂの２のべき乗数は−２なので、指数部は、「０１１ １１１１ １１１１ １１０１」となる。仮数部はＩＹ（７）のビット位置２７から、０１０１のパターンがＩＹ（７）、ＩＹ（６）、ＩＹ（５）、ＩＹ（４）、ＩＹ（３）、ＩＹ（２）で７回、ＩＹ（１）で２回の計６＊７＋２＝４４回続く。符号ビットはｉｓｉｇｎ＝０なので、Ｂの先頭ビットは０で、符号部および指数部は、「００１１ １１１１ １１１１ １１０１」となり、浮動小数点数Ｂは、１．０／３．０となっている。従って、前提条件では、正しい結果の１．０／３．０が得られる。
【００５４】
以上で実施形態の説明を終えるが、本発明の態様はこれらに限定されるものではない。その他、ハードウェア構成や処理手順などの具体的な構成について、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【図面の簡単な説明】
【００５５】
【図１】本発明の一実施形態に関するデータ処理装置を示す構成図である。
【図２】本発明の一実施形態に関する逆数算出処理を示すフローチャートである。
【図３】本発明の一実施形態に関する図２のＳ２０１の入力処理の詳細を示すフローチャートである。
【図４】本発明の一実施形態に関する図２のＳ２０２の整数変換処理の詳細を示すフローチャートである。
【図５】本発明の一実施形態に関する図２のＳ２０３の特異値処理の詳細を示すフローチャートである。
【図６】本発明の一実施形態に関する図２のＳ２０４の整数除算処理の詳細を示すフローチャートである。
【図７】本発明の一実施形態に関する図２のＳ２０５の浮動小数点変換処理の詳細を示すフローチャートである。
【図８】本発明の一実施形態に関する図２のＳ２０６の出力処理の詳細を示すフローチャートである。
【図９】本発明の一実施形態に関する計算時の整数配列の値を示す説明図である。
【符号の説明】
【００５６】
１０１  補助記憶装置
１０２  メモリ
１０３  ＣＰＵ
１０４  入力部
１０５  出力部
１１１  プログラム
１１２  コンパイラ
１１３  実行モジュール
【図１】
2007257225.tif 000006
【図２】
2007257225.tif 000007
【図３】
2007257225.tif 000008
【図４】
2007257225.tif 000009
【図５】
2007257225.tif 000010
【図６】
2007257225.tif 000011
【図７】
2007257225.tif 000012
【図８】
2007257225.tif 000013
【図９】
2007257225.tif 000014