1 .\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
3 .\" This is free documentation; you can redistribute it and/or
4 .\" modify it under the terms of the GNU General Public License as
5 .\" published by the Free Software Foundation; either version 2 of
6 .\" the License, or (at your option) any later version.
8 .\" The GNU General Public License's references to "object code"
9 .\" and "executables" are to be interpreted as the output of any
10 .\" document formatting or typesetting system, including
11 .\" intermediate and printed output.
13 .\" This manual is distributed in the hope that it will be useful,
14 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
15 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 .\" GNU General Public License for more details.
18 .\" You should have received a copy of the GNU General Public
19 .\" License along with this manual; if not, write to the Free
20 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
23 .\" 2000-08-14 added GNU additions from Andreas Jaeger
24 .\" 2000-12-05 some changes inspired by acahalan's remarks
26 .\" Japanese Version Copyright (c) 2000-2001 NAKANO Takeo
27 .\" and Copyright (c) 2008 Akihiro MOTOKI.
28 .\" Translated 2001-02-08, NAKANO Takeo <nakano@apm.seikei.ac.jp>
29 .\" Updated 2003-10-15, Kentaro Shirakata <argrath@ub32.org>
30 .\" Updated 2005-02-26, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
31 .\" Updated 2008-09-16, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
33 .\"WORD: (floating-point) exception (浮動小数点) 例外
37 .TH FENV 3 2010-10-31 "Linux" "Linux Programmer's Manual"
39 feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag,
40 fetestexcept, fegetenv, fegetround, feholdexcept, fesetround,
41 fesetenv, feupdateenv, feenableexcept, fedisableexcept,
42 fegetexcept \- 浮動小数点の丸めと例外の取り扱い
47 .BI "int feclearexcept(int " excepts );
49 .BI "int fegetexceptflag(fexcept_t *" flagp ", int " excepts );
51 .BI "int feraiseexcept(int " excepts );
53 .BI "int fesetexceptflag(const fexcept_t *" flagp ", int " excepts );
55 .BI "int fetestexcept(int " excepts );
57 .B "int fegetround(void);"
59 .BI "int fesetround(int " rounding_mode );
61 .BI "int fegetenv(fenv_t *" envp );
63 .BI "int feholdexcept(fenv_t *" envp );
65 .BI "int fesetenv(const fenv_t *" envp );
67 .BI "int feupdateenv(const fenv_t *" envp );
72 これらの 11 個の関数は C99 で定義されており、
73 浮動小数点の丸めと例外 (オーバーフロー、ゼロによる除算など)
81 例外は、結果が浮動小数点数値で表記されなければならないのに、
82 その絶対値が表現可能な浮動小数点数の (有限の) 最大値よりも
83 (ずっと) 大きくなってしまうような場合に起こる。
86 例外は、結果が浮動小数点数値で表記されなければならないのに、
87 その絶対値が正の正規化浮動小数点数の最小値よりも
89 (そして 非正規化数で表現した場合に非常に精度を失ってしまう)
98 例外が起きたときには、常にこの例外も起こる。
101 例外は、演算結果がうまく定義できない結果を生じるような場合に起こる。
102 例えば 0/0、無限大 \- 無限大、sqrt(\-1) など。
105 ひとつは、単一のビットで (例外があったかなかったかを) 表す方法で、
106 これらのビットは整数のあるビット位置に対応し、ビットの対応付けは
107 実装依存である。もう一つは、内部構造体を使って表す方法で、
109 (例えば例外が起こったコードのアドレスなど) が含まれる。
116 の各マクロは、それぞれ対応する例外の処理を
118 このとき対応するビットをそれぞれ定義することになるので、
120 .BR FE_OVERFLOW | FE_UNDERFLOW
121 という整数の引き数を用いて行うことができる。
122 他の例外もサポートされているかもしれない。
124 マクロは、サポートされている例外に対応するビットが全てセットされている
125 (サポートされている例外全ての論理和である)。
131 (処理は実装でサポートされている例外についてのみ行われる)。
133 .BR fegetexceptflag ()
146 .BR fesetexceptflag ()
154 .BR fegetexceptflag ()
155 関数を呼び出して取得しておかなければならない
157 .BR fegetexceptflag ()
159 .BR fesetexceptflag ()
162 のすべてのビットを含む値を指定すること)。
168 現在設定されている例外に対応するビットが 1 になったワードを返す。
170 丸めモードは、結果が仮数部だけで正確に表現できない際に、
171 浮動小数点操作の結果をどのように扱うかを決めるものである。
172 さまざまな丸めモードを提供することができる:
174 (正の無限大に向かって) 大きくなる方向に丸める、
175 (負の無限大に向かって) 小さくなる方向に丸める、
182 の各マクロは、それぞれ対応する丸めの方向を
186 関数は現在の丸めモードに対応するマクロを返す。
189 関数は丸めモードを引き数に与えられた値にし、
192 C99 と POSIX.1-2008 では
197 浮動小数点数の加算についての実装定義された丸め動作を表し、
210 他の値はマシン依存であり、標準的ではない丸めモードである。
215 で設定された現在の丸めモードが反映されるべきである
221 型の内部オブジェクト一つで取り扱うことができる。
223 .RI ( "const fenv_t *"
227 これはプログラムの開始時に構築される環境であり、
228 ISO C では、丸めモードを最も近い値への丸め
230 に設定し、すべての例外をクリアし、不停止 (nonstop)
231 (例外が起きても継続する) モードとするように規定されている。
234 関数は、現在の浮動小数点環境を、オブジェクト
240 さらに可能であれば、全ての例外フラグをクリアし、
241 nonstop (例外時にも実行を継続) モードに設定する。
247 このオブジェクトは、有効であることが事前に分かっていなければならない。
260 が表現する浮動小数点環境をインストールする。
261 ただし、現在発生している例外はクリアされない。
265 の値とのビットごとの OR を取ったものになる。
268 は、事前に有効であることが分かっていなければならない。
270 これらの関数は、成功の場合 0 を返し、エラーが発生すると 0 以外を返す。
271 .\" 以前は、これらの関数のうち 7つは void を返すものと書かれていた。
272 .\" これは C99 標準の Corrigendum 1 (ISO/IEC 9899:1999/Cor.1:2001(E))
275 これらの関数は glibc バージョン 2.1 で初めて登場した。
277 IEC 60559 (IEC 559:1989), ANSI/IEEE 854, C99, POSIX.1-2001.
280 可能な場合には、GNU C Library はマクロ
282 を定義する。このマクロはすべての例外でトラップが生じるような環境を表す。
287 C99 標準は浮動小数点マスク (例えば特定のフラグでのトラップなど)
288 の各ビットの設定方法については定義していない。
289 バージョン 2.2 以降の glibc は、
290 .BR feenableexcept ()
292 .BR fedisableexcept ()
294 各々の浮動小数点トラップを設定できるようになっている。
297 によって状態の問い合わせもできるようになっている。
300 .BR "#define _GNU_SOURCE" " /* feature_test_macros(7) 参照 */"
301 .B "#define _GNU_SOURCE"
303 .B "#include <fenv.h>"
305 .BI "int feenableexcept(int " excepts );
307 .BI "int fedisableexcept(int " excepts );
309 .B "int fegetexcept(void);"
313 .BR feenableexcept ()
315 .BR fedisableexcept ()
318 によって表現される各例外のトラップを有効 (無効) にする。
319 成功した場合は直前に有効になっていた例外のセットを返す。
322 関数は現在有効になっている例外全てからなるセットを返す。
328 で設定された現在の丸めモードが反映されるべきであるとされている。
330 .\" Aug 08, glibc 2.8
334 .\" See http://gcc.gnu.org/ml/gcc/2002-02/msg01535.html