3.1 NetCDF外部データ型
NetCDFインターフェースによってサポートされている外部データ型は以下の通りです。
char テキストを表現するための8ビット文字 byte 符号付、または符号無しの8ビット整数(下記参照) short 符号付16ビット整数 int 符号付32ビット整数 float, real 32ビットの浮動小数点数 double 64ビットの浮動小数点数
これらはデータの精度と個々の値に必要なビット数のトレードオフの幅を広げるために設定されました。これらの外部データ型は任意のマシンや言語の組み合わせによってサポートされている内部データ型から完全に独立しています。
これらのデータ型が「外部」と呼ばれるのはNetCDFデータのポータブル外部表記に対応するからです。あるプログラムがデータを内部変数として読み込む際に、必要であれば指定された内部変数型に変換されます。同様に、内部データ型がNetCDF変数の外部データ型と異なる場合には、内部データをNetCDF変数として書き込む際に、異なる外部データ型に変換されてしまう可能性があります。
外部型と内部型を分離し、自動的に外部-内部型変換をすることにはいくつかの利点があります。数値変数の外部データ型を知らなくても自動的にどのような数値型にも変換できるからです。この特性を利用して、十分に幅広い範囲の内部データ型を使用することによって外部データ型から独立した形にコードを単純化したりすることも可能です。即ち、数種類の異なる外部データ型を持つ数値NetCDFデータに関しては倍精度になります。ある変数の外部データ型が変更されてもプログラムを書き換える必要は無いのです。
外部数値型から、もしくは外部数値型へ変換をする場合にはライブラリに任せます。このように外部データ表記と内部データ型間の変換を自動化し、両者を切り離すことはNetCDFの将来のバージョンにとってはより一層重要な意味を持ちます。圧縮データに新たな外部データ型が加えられ、それに対応する内部データが存在しないケースも出てくるかもしれません。(例えば11ビット値の圧縮配列等)
ある数値型から別の型に変換する場合に、変換された値を表現しきれない型に変換するとエラーが生じます。例えば、内部の短い整数型では外部で整数として格納されているデータを表しきれないでしょう。数値配列にアクセスする際に、表現可能な領域から一つ以上の値がはみ出してしまった場合にはレンジエラーが返されてきます。領域内に収まる他の数値については正常な変換が行われます。
ここで注意しなければならないのはデータ型の変換に伴う単なる精度の悪化ではエラーが返されないということです。つまり、倍精度の数値を単精度の浮動小数点数に変換した場合には、倍精度の値が変換先のプラットフォームで表現可能な単精度の浮動小数点数の範囲から逸脱しない限り、エラーは返されません。同様に、浮動小数点数の仮数の有効桁数では表しきれない程の大きな整数値を読み込んだ場合にも、この操作によって失われた精度に対するエラーは返されません。このような精度のロスを避けるにはアクセスする前に外部データの変数型をチェックし、十分な精度を持つ内部データ型に変換するようにしてください。
基本外部データ型の名前(byte, char, short, int, floatまたはreal及びdouble)はCDLにおいては予約語です。ですから、変数・次元・属性の名前はこれらを使用してはいけません。
バイトデータ型は符号付整数値(-128〜127)としても符号なし整数値(0〜255)としても扱うことができます。しかし、バイトデータ型を他の数値表現型に変換する場合には符号付数値として認識されます。
NetCDF外部データ型と任意の言語のデータ型との互換性については2.3節「変数」(p.14)を参照してください。
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |