# マニュアルページ 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 に設 定
         されます。