TOC PREV NEXT INDEX

Put your logo here!


型変換


新しいインターフェースにおいては、どのような数値型へも、または数値型からの自動変換も提供されているので、ユーザーは数値変数の外部データ型を知っている必要はありません。この特徴を使って、コードを外部データ型に依存しないようにして簡単にすることができます。void*ポインタを排除することによって、以前のインターフェースでは不可能であった、コンパイル時に型エラーを発見することを可能にしました。変数の外部データ型を扱うに際にプログラムを変更する必要が無いために、新しいインターフェースはプログラムをより強固にすることができます。

外部数値型からの変換が必要な場合はライブラリによって扱われます。この自動変換機能と外部データ表記の内部データ型からの分離はNetCDF4版においてより重要になります。4版では、自然に対応する内部データ型が存在しない圧縮データ(例えば11ビット値の配列)用の新しい外部データ型が用意される予定です。

ある数値型から他の型に変換する操作は、ターゲットの型が変換された値を表現できない場合にエラーを引き起こします。(NetCDF-2においては、そのようなオーバーフローはXDR階層でのみ起こり得ました。)例えば、floatは外部ではNC_DOUBLE(IEEE浮動小数点数)として格納されているデータをもつことができないかもしれません。値の配列をアクセスする際には、表現し得る範囲を超えた値が一つまたはそれ以上ある場合には、NC_ERANGEエラーが返されますが、他の値は正しく変換されます。

型変換において、単に精度のロスが生じただけではエラーが返されないことに注意してください。そのため、例えばintに倍精度の値を読み込んだ場合には、その倍精度の値の大きさがプラットフォーム上のintで表現できる範囲を超えない限りエラーは生じません。同様に、仮数部分に整数のビットをすべて収めることのできないfloatに大きな整数を読み込み、精度が失われてもエラーは生じません。このような精度のロスを防ぐためには、アクセスする変数の外部データ型を確認し、それと互換性のある内部データ型を使用しましょう。

新しいインターフェースはテキスト列を表現する文字配列と小さい整数を表わす8ビットバイトの配列とを区別します。このインターフェースはテキスト列のためのtext, uchar, schar, 非符号バイト値と符号付バイト値の内部データ型をサポートします。

関数_uchar_scharは曖昧さを排除し、非符号付と符号付のバイトデータを両方サポートするためにNetCDF-3で導入されました。NetCDF-2においては、外部NC_BYTE型が非符号付もしくは符号付の値のどちらを表現しているのかを決めるのはユーザーでした。NetCDF-3においては、NC_BYTEshort, int, long, float, doubleへの変換に際しNC_BYTEは符号付の値として扱います。(もちろん、内部データ型が符号付charの場合には変換は行なわれません。)関数_ucharでは、NC_BYTEをあたかも非符号付のように扱います。よって、NC_BYTEと非符号付char間の変換においてはNC_ERANGEエラーは発生しません。



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