TOC PREV NEXT INDEX

Put your logo here!


3.3 型変換


NetCDF変数にはそれぞれ、最初に定義された時に指定される外部型があります。この外部型によってデータがテキストや数値として扱われるか判別されます。数値として扱われる場合には、その範囲と精度も指定されます。

NetCDFの変数の外部型がcharの場合、テキスト配列である文字データのみが変数として書き込み、読み取ることが可能です。テキストデータを異なる型のデータに自動変換する機能はサポートされていません。

ただし、数値データである場合には変数を異なるデータ型としてアクセスし、メモリに格納されている数値データとNetCDF変数との間で自動的に型変換する機能をNetCDFライブラリは保有しています。例えば、すべての数値データを倍精度の浮動小数点数として扱うプログラムを作成した場合には、NetCDF変数の外部型がどんな型であるかを気にせずに、NetCDFデータを倍精度配列に読み取ることができます。NetCDFデータを読み取る際、様々な大きさの整数や単精度の浮動小数点数は、倍精度の数値用のデータアクセスインターフェースを使ってアクセスすれば、自動的にすべて倍精度数値になります。もちろん、このように自動的に数値が変換されることを望まない場合には、その数値の型が存在すれば、それぞれのNetCDF変数の外部データ型に対応したインターフェースを使用すれば避けられます。

NetCDFが行う数値変換は大変わかりやすいものばかりです。それは、数値変換が任意の型のデータを別のデータ型の変数を取るよう指定する操作であるからです。例えば、浮動小数点NetCDFデータを整数として読む場合には、小数点以下は切り捨てられます。浮動小数点数を整数の変数に割り付ける場合と同様です。このような打ち切りは数値変換に伴う精度悪化の例といえます。

ある数値型から他の異なる数値型に変換する場合にも、変換先の型が変換された数値を表すことのできない型の場合にもエラーが生じます。例えば、整数では外部型としてIEEE浮動小数点数として格納されているデータを表せません。数値の配列をアクセスする際には、一つ以上の数値が表せる範囲外である場合にはレンジエラーが返ってきます。その他の範囲内にある数値については正しく変換されます。

注意すべき点は、型変換による精度のロスのみではエラーを引き起こさないということです。例えば、倍精度の数値を整数として読む場合には、倍精度の数値の大きさが読込先のプラットフォームで表し切れる整数の範囲外でなければエラーと判定されません。同様に、大きな整数を浮動小数点数に変換する際に、浮動小数点数の仮数部にその整数のすべてのビットを表し切れなくて精度にロスが生じたとしてもエラーにはなりません。このような精度のロスを避けたい場合にはアクセスする変数の外部型をチェックして、使用する内部型と整合性があることを確認してください。

表し切れる範囲の境界に近い大きな浮動小数点数を書き込む場合にレンジエラーが生じるかどうかはプラットフォーム次第です。NetCDF浮動小数点変数に書き込める最大の浮動小数点数は、使用しているシステムで表せる最大の浮動小数点数であり、2の128乗よりは小さい値です。倍精度変数に書き込める最大の倍精度数値は、使用しているシステムで表せる最大の倍精度数値であり、2の1024乗より小さくなります。

この自動変換と外部データ表示を内部データ型から切り離すことは、NetCDFの将来のバージョンにおいてより重要性を増してくるでしょう。それは、将来、対応する内部型が存在しないデータ表現(例えば11ビット数値の配列等)に新たな外部データ型が導入されることが考えられるからです。



Quadralay Corporation
http://www.webworks.com
Voice: (512) 719-3399
Fax: (512) 719-3606
sales@webworks.com
TOC PREV NEXT INDEX