Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/11-9
11-9 浮動小数点数
Palm OS は、C 言語では float および double として宣言される、IEEE-754 の単精度および倍精度の浮動小数点数をサポートしています。float 型の数値は 4 バイトを占め、有効レンジは 1.17549e-38 〜 3.40282e+38 です。double 型の数値は 8 バイトを占め、有効レンジは 2.22507e-308 〜 1.79769e+308 になります。
float 型と double 型に対しては加減乗除の基本的の算術演算をを行うことができます。標準 C のヘッダファイルである math.h に含まれるような高水準な関数はコア OS には含まれません。自分で実装するか、サードパーティ製の算術ライブラリを使用する必要があります。
標準 IEEE-754 の特殊な“non-number”値である NaN ( not a number ) や +INF ( positive infinity )、および -INF ( negative infinity ) は、表現可能な値の範囲を越えるような演算を行うと生成されます。例えば、正の数値を 0 で除算すれば +INF が返されます。
浮動小数点数マネージャには、倍精度浮動小数点数と科学的記法による文字列間の相互変換を行う関数が含まれています。また、FlpBufferCorrectedAdd および FlpBufferCorrectedSub 関数も含まれています。これは名前が示す演算を行ない、結果がゼロでなければならないのに浮動小数点数の表現上そうなっていないような状況で補正を行ないます。浮動小数点数を受けとる、あるいは返却する全ての浮動小数点数マネージャ関数は、FlpDouble として宣言されている形を要求します。浮動小数点数マネージャは FlpCompDouble という共用体を定義して、double と FlpDouble の相互変換に使えるようにしています。この共用体は以下のように使用します。
double dblFlpCorrectedAdd (double d1, double d2, Int16 acc) { FlpCompDouble fcd1, fcd2, fcdResult; fcd1.d = d1; fcd2.d = d2; FlpBufferCorrectedAdd(&fcdResult.fd, fcd1.fd, fcd2.fd, acc); return fcdResult.d; }
- NOTE
- CodeWarrior を使用しているのであれば、FlpBufferAToF、FlpBufferCorrectedAdd、および FlpBufferCorrectedSub のかわりに FlpAToF、FlpCorrectedAdd、および FlpCorrectedSub を使用するという選択肢があります。これらの“non-buffer”関数は全て、第一パラメータの指す値を更新するかわりに結果をダイレクトに返します。これらの関数は FlpDouble ―― これは構造体です ―― を返すため、また GCC コンパイラが関数からの構造体のリターンに用いる慣習が Palm OS と互換性がないため、GCC ユーザーは FlpBuffer〜 バージョンしか使用することができません。
double 型のバイナリ表現を扱わなければならないような稀な状況のために、浮動小数点数マネージャは 64ビット浮動小数点数の符号、仮数、指数を取得(一部変更)できるような関数とマクロをいくつか用意しています。浮動小数点数マネージャを構成する関数やマクロについては、Palm OS Programmer's API Reference の 757 ページにある 36 章の“浮動小数点数マネージャ”を参照して下さい。
Palm OS 2.0 から導入された浮動小数点数マネージャは、Palm OS 1.0 の一部である浮動小数点数マネージャと区別するために新浮動小数点数マネージャと呼ばれることがあります。1.0 の浮動小数点数マネージャは新マネージャよりも精密さや便利さの面で劣ります( 加算のような単純な演算でさえ浮動小数点数マネージャをコールしなければなりません )が、互換性のためにひとまず ROM 内に残されています。これらの関数は既に公式には Palm OS SDK で宣言されておらず、今後使用するべきでもありません。現在の関数が“Flp”で始まるのに対し、旧浮動小数点数マネージャのこれらの関数は“Fpl”で始まります。旧浮動小数点数マネージャを構成する関数については、Palm OS Programmer's API Reference の 2461 ページにある付録Cの“1.0 浮動小数点数マネージャ”を参照して下さい。