マニュアルページ ieee_flags.3m
名前
ieee_flags - IEEE 標準算術機構のモードおよびステータス関数
形式
cc [ flag ... ] file ... -lsunmath -lm [ library ... ]
#include <sunmath.h>
int ieee_flags(const char *action, const char *mode, const
char *in, char **out);
機能説明
この関数により、C プログラム中で ANSI/IEEE 規格 754-1985 の
算術機構を有効に利用するために必要なモードおよびステータスへ
簡単にアクセスすることができます。指定する引数は、すべて文字
列へのポインタです。処理効率を考慮し、無効な引数または無効な
組み合わせの引数を指定した場合の結果は未定義です。
引数 action には、``get''、``set''、``clear''、 ``clearall''
の いずれかを指定できます。引数 mode には 3 種類のモードの指
定が可能で、そのうちの 2 つは IEEE 算術機構のモードに対応 し
ています。
``direction'', ... 現在の丸め方向モード
``precision'', ... 現在の丸め精度モード
もう 1 つは IEEE 算術機構のステータスに対応しています。
``exception''. ... 存続例外発生ステータス
引数 in および out には、次の 14 種類の値が指定できます。
``nearest'', ... 最も近い値への丸め
``tozero'', ... ゼロ方向への丸め
``negative'', ... 負の無限大方向の丸め
``positive'', ... 正の無限大方向の丸め
``extended'',
``double'',
``single'',
``inexact'',
``division'', ... ゼロ除算例外
``underflow'',
``overflow'',
``invalid'',
``all'', ... 上記 5 種類の例外のすべて
``common''. ... 無効な演算、オーバーフロー、ゼロ除算の共通例外
注意 : ``all'' および ``common'' に は、 ``set'' ま た は
``clear'' を指定した場合にだけ意味を持ちます。
``clearall'' を指定した場合、 ieee_flags() の戻り値は 0 で、
モー ド とステータスはすべてデフォルト値に設定されます。 out
には何も代入されません。たとえば、
char *mode, *out, *in;
ieee_flags("clearall",mode, in, &out);
とすると、丸め方向が ``nearest''、丸め精度が ``extended''、
存続例外発生ステータスがゼロに設定されます。
``clear'' を指定すると、 ieee_flags() の戻り値はゼロで、モー
ド とステータスはデフォルト値に設定されます。 out には何も代
入されません。たとえば、
char *out, *in;
ieee_flags("clear","direction", in, &out); ...
とすると丸め方向が ``nearest'' に設定されます。
``set'' を指定すると、 ieee_flags() の戻り値は、指定したアク
ションが正常に終了した場合は 0、対応するステータスまたはモー
ドが利用できない (たとえば、ハードウェアでサポートされていな
い) 場合は 1 になります。 out には何も代入されません。たとえ
ば、
char *out, *in;
ieee_flags ("set","direction","tozero",&out); ...
とすると、丸め方向がゼロ方向に設定されます。
``get'' を指定すると、次のような状況が考えられます。
状 況 1: mode が ``direction'' の と き、 out に は
``nearest''、``tozero''、``positive''、``negative'' のいずれ
かの文字列が代入されます。 ieee_flags() は、 <sys/ieeefp.h>
で定義されている列挙型 fp_direction_type に従って、 out に対
応する値を返します。
状 況 2: mode が ``precision'' の と き、 out に は
``extended''、 ``double''、``single'' のいずれかの文字列が代
入されます。 ieee_flags() は、 <sys/ieeefp.h> で定義されてい
る列挙型 fp_precision_type に従って、 out に対応する値を返し
ます。
状況 3: mode が ``exception'' のとき、 out には次のいずれか
の文字列が代入されます。
(a) ``not available'' - 例外に関する情報が得られない場合
(b) ``'' (空の文字列) - 存続例外がない場合
(c) 例外のうち次に示す優先順位で一番高いもの
(1) in により指定された例外
(2) ``invalid''
(3) ``overflow''
(4) ``division''
(5) ``underflow''
(6) ``inexact''
この場合、 ieee_flags() は、5 または 6 ビットで構成される 値
を返します。各ビットは個々の例外発生存続ステータスフラグに対
応し、0 はオフ、1 はオンを表します ( <sys/ieeefp.h> の列挙型
fp_exception_type を参照)。特定の例外に対応するビットはアー
キテクチャによって異なります ( /usr/include/sys/ieeefp.h を
参照)。
例 :
extern int ieee_flags(const char *, const char *, const char *, char **);
char *out;
int k;
ieee_flags ("clear","exception","all",&out); /* すべての存続例外をクリア */
...
... (3 つの例外を生成するコード: overflow, invalid, inexact)
...
k = ieee_flags("get","exception","overflow",&out);
このコードを実行すると、out は ``overflow''、k は 25 に設 定
されます。