浮動小数点数特有の機構

infinity, -infinity

浮動小数点数を計算するときだけに現れる数値があります。まず、数値として無限大および無限小を表す"infinity"と"-infinity"があります。これは定数として利用できます。例えば、

2.0 0.0 f/ infinity f=

とすれば、整数スタックに真(-1)が返るでしょう。正の浮動小数点を浮動小数点0で割れば、infinityになるわけです。結果が負の無限大(無限小)なら-infinityになります。

iMopsではInfinity,-infinityは現状では定義されていません。

NAN


もうひとつ、"NAN"という値があります。意味はNot a Numberで、浮動小数点数ライブラリで定義されているユーティリティ関数で、入力パラメターが定義域を外れたときなどに返されます。例えば、

2.0 FASIN \ FPスタックにNANが返る

これは必ずしも定数ではなく、プログラマティカルに作り出して利用することもできるもののようです。関数の返した値が単純に"NAN"であるか否かを確かめるには、標準Cライブラリ関数にある"isnan"(または"__isnan")を呼ぶのが一番簡単です。Cライブラリの呼び方は後で述べます。

シングルフロート

Mopsでは、通常はダブル精度の浮動小数点数を用いますが、ライブラリ関数によっては、シングル精度の浮動小数点数を必要とするものもあります。そこで、変数として、シングルフロート形式(4バイト浮動小数点数形式)を用いることはできます。これはメモリーの節約になります。シングルフロートの変数は4バイトですから、普通のVariable変数を使うことができます。この場合、数値を格納するには"SF!"、数値を取り出すには"SF@"を使います。

SF! ( addr -- ) ( F: r -- ) \ FPスタック値をaddの場所にシングルフロート形式で格納
SF@ ( addr -- ) ( F: -- r ) \ addrの場所にシングルフロート格納された値をFPスタック上に取り出す


関連項目:






最終更新:2018年12月21日 19:17