マニュアルページ fex_merge_flags.3m




名前

     fegetenv,     fesetenv,      feholdexcept,      feupdateenv,
     fex_merge_flags - 浮動小数点環境の管理


形式

     cc   [   flag   ...   ]   file   ...     -R/opt/SUNWspro/lib
     -L/opt/SUNWspro/lib -lm9x [ library ... ]

     #include <fenv.h>

     void fegetenv(fenv_t *envp);

     void fesetenv(const fenv_t *envp);

     int feholdexcept(fenv_t *envp);

     void feupdateenv(const fenv_t *envp);

     void fex_merge_flags(const fenv_t *envp);

     #include <fenv96.h>

     int feholdexcept96(fenv_t *envp);


機能説明

     これらの関数は浮動小数点環境を管理します。つまり、例外 フ ラ
     グ、丸め方向モード、および、例外処理モードを単一の言語要素と
     して構成します。SPARC システムでは、浮動小数点環境は規格以外
     の算術モードも含みます。Intel システムでは、浮動小数点環境は
     丸め精度モードを含みます。

     fegetenv(envp) は、現在の浮動小数点環境を envp が指 す オ ブ
     ジェクトに保存します。型 fenv_t は <fenv.h> に定義されていま
     す。

     fesetenv(envp) は、envp が指すオブジェクトで表現された浮動小
     数 点 環境を設定します。引数 envp は、fegetenv または fehol-
     dexcept、あるいは、同等のマクロ FE_DFL_ENV (<fenv.h> に定 義
     されている) への呼び出しで設定されたオブジェクトを指していな
     ければなりません。fesetenv は、これらの例外を発生するので は
     な く、envp 経由で表現された例外フラグの状態をインストールす
     るだけです。

     マクロ FE_DFL_ENV は、デフォルトの浮動小数点環境を表現する、
     型  fenv_t の const 修飾付きオブジェクトへのポインタに拡張さ
     れます。つまり、すべての例外フラグはクリアされ、すべての例外
     に対して、FE_TONEAREST 丸め方向モードと FEX_NONSTOP 処理モー
     ドがインストールされます。SPARC システムでは、この環境は規格
     以外の算術モードも無効になります。Intel システムでは、この環
     境は FE_LDBLPREC 丸め精度モードを持ちます。


     feholdexcept(envp) は、現在の浮動小数点環境を envp が指す オ
     ブジェクトに保存し、例外フラグをクリアし、すべての例外に対し
     て FEX_NONSTOP 例外処理モードをインストールします。

     feupdateenv(envp) は、envp が指すオブジェクトで表現された 浮
     動小数点環境を確立し、以前の環境で設定されていたフラグに対応
     する例外を発生します。すべての例外に対して、新たに確立された
     環 境で FEX_NONSTOP 処理モードが有効である場合は、例外のフラ
     グが設定されます。そうでない場合は、fex_set_handling(3M)  に
     記 述されているように適切なアクションが行われます。引数 envp
     は、feholdexcept または fegetenv、あるいは、同等 の マ ク ロ
     FE_DFL_ENV  への呼び出しで設定されたオブジェクトを指していな
     ければなりません。

     fex_merge_flags(envp) は、envp が指すオブジェクトで表現さ れ
     た環境に設定されている例外フラグを現在の環境にコピーします。
     引数 envp は、feholdexcept または fegetenv、あるいは、同等の
     マクロ FE_DFL_ENV への呼び出しで設定されたオブジェクトを指し
     ていなければなりません。fex_merge_flags 関数は、これらの例外
     を発生するのではなく、フラグを設定するだけです。


戻り値

     feholdexcept は、すべての例外に対して FEX_NONSTOP 例外 処 理
     モードが確立されている場合にはゼロを返し、そうでない場合はゼ
     ロ以外の値を返します。


使用例

     次のコード例の一部は、間違ったアンダーフローを無視し、他の全
     ての例外を出力する計算を行います。

          #include <fenv.h>
          /*...*/
          {
               fenv_t save_env;

               feholdexcept(&save_env);
               /* 例外を発生する可能性のある計算 */
               if (fetestexcept(FE_UNDERFLOW))
                    feclearexcept(FE_UNDERFLOW);
               feupdateenv(&save_env);
               /*...*/
          }


属性

     次の属性については、 attributes(5) を参照してください。







     ______________________________________________________
    |      属性タイプ     |             属性値            |
    |_____________________|_______________________________|
    | 使用条件            |  SPROm9xs                     |
    | インタフェース安定性|  標準、安定、廃止 (以下を参照)|
    | MT レベル           |  MT-安全                      |
    |_____________________|_______________________________|

     fegetenv、fesetenv、feholdexcept、feupdateenv 関数は C99  規
     格 で 定義されています。この関数のインタフェース安定性は「標
     準」です。

      fex_merge_flags 関数は規格により定義されていません。この 関
     数のインタフェース安定性は「安定」です。

     これらの関数がはじめて実装された 1996 年の C99 規格の草案 で
     は、 feholdexcept は、要求した丸めモードが確立されている場合
     にはゼロ以外の値を返し、それ以外はゼロを返すと規定されていま
     した。つまり、最終的な定義とは逆の内容が規格に盛り込まれたわ
     けです。規格草案の変更に対応できるように、当時の  libm9x  に
     は、C99 規格草案に準拠した関数 feholdexcept96 が用意されてい
     ました。"96" が接尾辞のこの関数は、<fenv96.h>ファイルで宣 言
     さ れました。現在では C99 は完成し、これらの接尾辞付き関数お
     よび <fenv96.h> ヘッダーファイルは必要なくなりました。この関
     数のインタフェース安定性は「廃止」です。

     <fenv96.h> ヘッダーファイルは今後のリリースでは削除 さ れ ま
     す。アプリケーションは標準関数と <fenv.h> ヘッダーファイルを
     代わりに使用します。


関連項目

     feclearexcept(3M)fesetround(3M)fesetprec(3M)fex_set_handling(3M)fex_set_log(3M)attributes(5)

注意事項

     マルチスレッド化されたプログラムでは、上記関数は、呼び出した
     スレッドだけの浮動小数点環境に影響を与えます。

     例外に対して FEX_CUSTOM 処理モードが有効である と き、 feup-
     dateenv  経 由でその例外を発生すると、処理関数が呼び出されま
     す。処理関数は例外フラグを変更し、fex_set_handling(3M) に 記
     述されているように設定します。ハンドラが戻す値はすべて無視さ
     れます。

     このページに記述されている関数は、必要に応じて 自 動 的 に、
     SIGFPE  ハンドラをインストールまたはインストール解除し、浮動
     小数点状態レジスタのトラップ有効モードビットを設定またはクリ
     ア し ます。これらの関数をプログラムで使用し、個別に、SIGFPE
     ハンドラをインストールしようとした場合、あるいはトラップ有効
     モードビットを制御しようとした場合、その結果の動作は定義され
     ていません。

     fex_set_handling(3M) に記述されているように、FEX_CUSTOM モー
     ドでインストールされている処理関数が呼び出されると、すべての
     例外トラップは無効になります。そして、SIGFPE がブロックさ れ
     ている間は、再び有効になることはありません。したがって、ハン
     ドラ内で fesetenv または feupdateenv を呼び出し、環境を変 更
     しようとすると、予期せぬ結果になります。

     「形式」で示しているように、cc で libm9x とリンクするため に
     は、コマンド行で次のように指定することを推奨します。

          -Rinstall-path/lib -Linstall-path/lib -lm9x

     install-path には、コンパイラがインストールされている場所 を
     指 定します (デフォルトでは、/opt/SUNWspro)。libm9x とリンク
     する方法についての詳細は、『』を参照してくださ
     い。