日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
FENV(3) FreeBSD ライブラリ関数マニュアル FENV(3) 名称 feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag, fetestexcept, fegetround, fesetround, fegetenv, feholdexcept, fesetenv, feupdateenv, feenableexcept, fedisableexcept, fegetexcept -- 浮動小数点環 境の制御 ライブラリ 数値計算ライブラリ (libm, -lm) 書式 #include <fenv.h> #pragma STDC FENV_ACCESS ON int feclearexcept(int excepts); int fegetexceptflag(fexcept_t *flagp, int excepts); int feraiseexcept(int excepts); int fesetexceptflag(const fexcept_t *flagp, int excepts); int fetestexcept(int excepts); int fegetround(void); int fesetround(int round); int fegetenv(fenv_t *envp); int feholdexcept(fenv_t *envp); int fesetenv(const fenv_t *envp); int feupdateenv(const fenv_t *envp); int feenableexcept(int excepts); int fedisableexcept(int excepts); int fegetexcept(void); 解説 <fenv.h> ルーチンは、IEEE Std 754-1985 で定義された例外フラグと丸めモード を含んで、浮動小数点環境を操作します。 例外 例外フラグは、浮動小数点の四則演算と数学ライブラリルーチンの副作用として 設定され、それらは、明示的にクリアされるまで設定されたままとなります。次 のマクロは、5 つの標準の浮動小数点の例外を表す int タイプのビットフラグを 展開します。 FE_DIVBYZERO (制限の定義によって) 計算の正確な結果が無限のとき、0 による 除算 (divide-by-zero) 例外は、起こります。例えば、0 で有限 の 0 でない数を割るか、または log(0) を計算すると、0 による 除算 (divide-by-zero) 例外を引き起こします。 FE_INEXACT 丸めのために精度の損失があるときはいつも、不正確 (inexact) 例外が起こります。 FE_INVALID プログラムが、合理的な答えが表せない計算を実行することを試 みるとき、無効オペレーション例外は、起こります。例えば、符 号付きのような無限大の引き算、0 の 0 除算、NaNss を含む位数 比較、と負の数の実際の平方根を取ることは、すべて無効の操作 です。 FE_OVERFLOW 0 による除算 (divide-by-zero) と対照的に、正確な結果の大き さが有限であるが、目的のタイプに適合するには大きすぎるの で、無限大が生成されるとき、オーバフロー例外は、起こりま す。例えば、DBL_MAX * 2 を計算することは、オーバフロー例外 を引き起こします。 FE_UNDERFLOW 計算の結果が精度を失うとき、0 に近すぎるので、アンダフロー は、起こります。結果は、非正規化数または 0 です。 さらに、FE_ALL_EXCEPT マクロは、上記のフラグと任意のアーキテクチャ特有の フラグのビット毎の論理和 (OR) に展開します。これらのフラグの組み合わせ は、それぞれ、プロセッサの浮動小数点の例外フラグをクリアする、格納する、 起こす、復元する、と調べるために feclearexcept(), fegetexceptflag(), feraiseexcept(), fesetexceptflag() と fetestexcept() 関数に渡されます。 例外は、feenableexcept() でアンマスクされ、fedisableexcept() でマスクされ ます。アンマスクされた例外は、それらが生成されるとき、トラップを引き起こ し、すべての例外がデフォルトでマスクされます。現在のマスクは、 fegetexcept() でテストすることができます。 丸めモード IEEE Std 754-1985 は、4 つの丸めモードを定めています。これらのモードは、2 進の浮動小数点の変数にそれらに適合するためにそれらの正確な値から丸められ る結果の方向を制御します。4 つのモードが次のシンボリック定数に対応してい ます。 FE_TONEAREST 結果は、表現可能な値に最も近いように丸められます。正確な結 果が 2 つの表現可能な値の間のちょうど中間であるなら、最後 のバイナリの桁が等しい (ゼロ) 値が選ばれます。これは、デ フォルトのモードです。 FE_DOWNWARD 結果は、負の infinity (無限大) に向かって丸められます。 FE_UPWARD 結果は、正の infinity (無限大) に向かって丸められます。 FE_TOWARDZERO 結果は、9 に向かって丸められます。 fegetround() と fesetround() 関数は、丸めモードを問い合わせして、設定しま す。 環境制御 fegetenv() と fesetenv() 関数は、例外フラグ、現在の例外マスク、丸めモー ド、とことによると他の実装特有の状態を含んで、浮動小数点の環境を保存して 復元します。feholdexcept() 関数は、fegetenv() のように振る舞いますが、例 外フラグをクリアして、ノンストップモードをインストールするという追加の効 果があります。ノンストップモードでは、浮動小数点の操作は、いつものように 例外フラグを設定しますが、SIGFPE シグナルが結果として発生しません。ノンス トップモードは、デフォルトですが、それは、feenableexcept() と fedisableexcept() によって変更されるかもしれません。feupdateenv() 関数 は、fesetenv() と同様に保存された環境を復元しますが、またそれは、古い環境 から何らかの浮動小数点の例外も再び起こします。 マクロ FE_DFL_ENV は、デフォルト環境へのポインタに展開します。 使用例 次のルーチンは、平方根関数を計算します。それは、feraiseexcept() を使用し て、適切な入力で明示的に無効例外を起こします。また、それは、中間値を計算 している間に不正確例外を延期し、次に、最終的な答えが不正確である場合にだ け、不正確例外が起こされることを許します。 #pragma STDC FENV_ACCESS ON double sqrt(double n) { double x = 1.0; fenv_t env; if (isnan(n) || n < 0.0) { feraiseexcept(FE_INVALID); return (NAN); } if (isinf(n) || n == 0.0) return (n); feholdexcept(&env); while (fabs((x * x) - n) > DBL_EPSILON * 2 * x) x = (x / 2) + (n / (2 * x)); if (x * x == n) feclearexcept(FE_INEXACT); feupdateenv(&env); return (x); } 関連項目 cc(1), feclearexcept(3), fedisableexcept(3), feenableexcept(3), fegetenv(3), fegetexcept(3), fegetexceptflag(3), fegetround(3), feholdexcept(3), feraiseexcept(3), fesetenv(3), fesetexceptflag(3), fesetround(3), fetestexcept(3), feupdateenv(3), fpgetprec(3), fpsetprec(3) 規格 以下の注意事項を除いて、<fenv.h> ISO/IEC 9899:1999 (``ISO C99'') に適合し ています。feenableexcept(), fedisableexcept() と fegetexcept() ルーチン は、拡張されています。 歴史 <fenv.h> ヘッダは、FreeBSD 5.3 ではじめて登場しました。それは、<ieeefp.h> で定義され、fpgetround(3) で文書化された標準的でないルーチンにとって代わ ります。 警告 FENV_ACCESS pragma は #pragma STDC FENV_ACCESS ON で有効にでき、 #pragma STDC FENV_ACCESS OFF 指示で無効にすることができます。この語句解析の範囲の注釈は、プログラムが 浮動小数点の環境にアクセスするかもしれないとコンパイラに伝えるので、厳し い IEEE-754 セマンティクスに違反する最適化は無効にされます。実行が FENV_ACCESS がオフであるコードのブロックに到達するなら、浮動小数点の環境 は未定義になります。 バグ FENV_ACCESS pragma は、システムコンパイラで実装されていません。しかしなが ら、一般的に、定数でない式は、低い最適化レベルで正しい副作用を発生させま す。 FreeBSD 11.4 March 16, 2005 FreeBSD 11.4