.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
-.\" Japanese Version Copyright (c) 2008 Akihiro MOTOKI
-.\" all rights reserved.
-.\" Translated 2008-08-17, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.07
-.\"
-.\"WORD: significand 仮数部
-.\"WORD: domain error 領域エラー
-.\"WORD: pole error 極エラー
-.\"WORD: range error 範囲エラー
-.\"
-.TH MATH_ERROR 7 2008-08-11 "Linux" "Linux Programmer's Manual"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MATH_ERROR 7 2008\-08\-11 Linux "Linux Programmer's Manual"
.SH 名前
math_error \- 数学関数からのエラーの検出
.SH 書式
.nf
-.B #include <math.h>
-.B #include <errno.h>
-.B #include <fenv.h>
+\fB#include <math.h>\fP
+\fB#include <errno.h>\fP
+\fB#include <fenv.h>\fP
.fi
.SH 説明
-エラーが発生すると、ほとんどのライブラリ関数は (\-1 や NULL などの)
-特別な値を返すことでエラーを通知する。
-.I <math.h>
-で宣言されている数学関数は、通常は浮動小数点値を返すので、
-他の機構を使ってエラーを通知する。
-エラー通知機構は 2 種類あり、
-古いものが
-.I errno
-を設定するやり方であり、新しいものが
-.BR fenv (3)
-で説明されている浮動小数点例外機構である。
-.RB ( feclearexcept (3)
-と
-.BR fetestexcept (3)
-を使用する。これらについては以下で概要を説明している。)
+エラーが発生すると、ほとんどのライブラリ関数は (\-1 や NULL などの) 特別な値を返すことでエラーを通知する。
+\fI<math.h>\fP で宣言されている数学関数は、通常は浮動小数点値を返すので、 他の機構を使ってエラーを通知する。 エラー通知機構は
+2 種類あり、 古いものが \fIerrno\fP を設定するやり方であり、新しいものが \fBfenv\fP(3) で説明されている浮動小数点例外機構である。
+(\fBfeclearexcept\fP(3) と \fBfetestexcept\fP(3) を使用する。これらについては以下で概要を説明している。)
-移植性が必要なプログラムで、数学関数からのエラーを確認する必要がある場合には、
-数学関数を呼び出す前に
-.I errno
-を 0 に設定し、以下を呼び出すべきである。
+移植性が必要なプログラムで、数学関数からのエラーを確認する必要がある場合には、 数学関数を呼び出す前に \fIerrno\fP を 0 に設定し、
.in +4n
.nf
feclearexcept(FE_ALL_EXCEPT);
+
.fi
.in
+を呼び出すべきである。
-数学関数から返ってきた際に、
-.I errno
-が 0 以外か、以下の呼び出しが 0 以外を返した場合
-.RB ( fenv (3)
-参照)、数学関数でエラーが発生している。
+数学関数から返ってきた際に、 \fIerrno\fP が 0 以外か、
.in +4n
.nf
fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW |
FE_UNDERFLOW);
+
.fi
.in
.\" enum
.\" FE_UNDERFLOW = 0x10,
.\" FE_INEXACT = 0x20
.\" };
+の呼び出しが 0 以外を返した場合 (\fBfenv\fP(3) 参照)、数学関数でエラーが発生している。
数学関数で発生するエラー条件については以下で説明する。
-.SS 領域エラー (domain error)
-.I 領域エラー
-が発生するのは、数学関数に渡された引き数の値がその関数が定義されている
-領域に入っていない場合である (例えば
-.BR log (3)
-に負の引き数を渡した場合)。
-領域エラーが発生すると、
-数学関数は普通は NaN を返し
-(同じ状況で違う値を返す関数もある)、
-.I errno
-に
-.B EDOM
-を設定し、「無効 (invalid)」
-浮動小数点例外
-.RB ( FE_INVALID )
-を上げる。
-.SS 極エラー (pole error)
-.I 極エラー
-が発生するのは、関数の数学的な結果が無限大そのものとなる場合である
-(例えば
-0 の対数は負の無限大である)。
-極エラーが発生すると、その関数の返り値は (符号付きの)
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-.B HUGE_VALL
-のいずれかとなる (前記の値のうちどれが返るかは関数の返り値の型により決まり、
-それぞれ
-.IR double ,
-.IR float ,
-.I "long double"
-に対応する)。
-結果の符号は、その関数の数学的な定義から決定される。
-.I errno
-は
-.B ERANGE
-に設定され、「0 による除算 (divide-by-zero)」
-浮動小数点例外
-.RB ( FE_DIVBYZERO )
-が上がる。
-.SS 範囲エラー (range エラー)
-.I 範囲エラー
-が発生するのは、関数の結果の値がその関数の返り値の型では表現できない場合
-である。関数の返り値は、範囲エラーがオーバーフローであったかアンダーフロー
-であったかによって異なる。
+.SS "領域エラー (domain error)"
+\fI領域エラー\fP が発生するのは、数学関数に渡された引き数の値がその関数が定義されている 領域に入っていない場合である (例えば \fBlog\fP(3)
+に負の引き数を渡した場合)。 領域エラーが発生すると、 数学関数は普通は NaN を返し (同じ状況で違う値を返す関数もある)、 \fIerrno\fP に
+\fBEDOM\fP を設定し、「無効 (invalid)」 浮動小数点例外 (\fBFE_INVALID\fP) を上げる。
+.SS "極エラー (pole error)"
+\fI極エラー\fP が発生するのは、関数の数学的な結果が無限大そのものとなる場合である (例えば 0 の対数は負の無限大である)。
+極エラーが発生すると、その関数の返り値は (符号付きの) \fBHUGE_VAL\fP, \fBHUGE_VALF\fP, \fBHUGE_VALL\fP
+のいずれかとなる (前記の値のうちどれが返るかは関数の返り値の型により決まり、 それぞれ \fIdouble\fP, \fIfloat\fP, \fIlong
+double\fP に対応する)。 結果の符号は、その関数の数学的な定義から決定される。 \fIerrno\fP は \fBERANGE\fP に設定され、「0
+による除算 (divide\-by\-zero)」 浮動小数点例外 (\fBFE_DIVBYZERO\fP) が上がる。
+.SS "範囲エラー (range エラー)"
+\fI範囲エラー\fP が発生するのは、関数の結果の値がその関数の返り値の型では表現できない場合
+である。関数の返り値は、範囲エラーがオーバーフローであったかアンダーフロー であったかによって異なる。
-浮動小数点のオーバーフローは、結果が有限だが、大き過ぎて
-結果を返す型では表現できない場合に発生する。
-オーバーフローが発生すると、
-その関数は
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-.B HUGE_VALL
-のいずれかを返す (前記の値のうちどれが返るかは関数の返り値の型により決まり、
-それぞれ
-.IR double ,
-.IR float ,
-.I "long double"
-に対応する)。
-.I errno
-は
-.B ERANGE
-に設定され、「オーバーフロー (overflow)」
-浮動小数点例外
-.RB ( FE_OVERFLOW )
-が上がる。
+浮動小数点のオーバーフローは、結果が有限だが、大き過ぎて 結果を返す型では表現できない場合に発生する。 オーバーフローが発生すると、 その関数は
+\fBHUGE_VAL\fP, \fBHUGE_VALF\fP, \fBHUGE_VALL\fP のいずれかを返す
+(前記の値のうちどれが返るかは関数の返り値の型により決まり、 それぞれ \fIdouble\fP, \fIfloat\fP, \fIlong double\fP
+に対応する)。 \fIerrno\fP は \fBERANGE\fP に設定され、「オーバーフロー (overflow)」 浮動小数点例外
+(\fBFE_OVERFLOW\fP) が上がる。
-浮動小数点のアンダーフローは、
-結果が小さ過ぎて、結果を返す型では表現できない場合に発生する。
-アンダーフローが発生すると、数学関数は通常は 0.0 を返す
-(C99 では、指定された型において最小の正規化された正の値より大きくない
-値を持つ実装定義 (implementation-defined) の値を返す、となっている)。
-.I errno
-は
-.B ERANGE
-に設定され、「アンダーフロー」浮動小数点例外
-.RB ( FE_UNDERFLOW )
+浮動小数点のアンダーフローは、 結果が小さ過ぎて、結果を返す型では表現できない場合に発生する。 アンダーフローが発生すると、数学関数は通常は 0.0
+を返す (C99 では、指定された型において最小の正規化された正の値より大きくない 値を持つ実装定義 (implementation\-defined)
+の値を返す、となっている)。 \fIerrno\fP は \fBERANGE\fP に設定され、「アンダーフロー」浮動小数点例外 (\fBFE_UNDERFLOW\fP)
が上がる。
-いくつかの関数では、渡された引き数の値や、正しい関数の結果が
-.I subnormal (非正規化数)
-になる場合に範囲エラーを上げる。
-subnormal な値とは、0 ではないが、その値が小さすぎて
-(仮数部の最上位ビットが 1 となる) 標準形では表現できないような値である。
-subnormal な値の表現では、仮数部の上位側のビットに 1 個以上の 0 が
-含まれることになる。
+いくつかの関数では、渡された引き数の値や、正しい関数の結果が \fIsubnormal (非正規化数)\fP になる場合に範囲エラーを上げる。
+subnormal な値とは、0 ではないが、その値が小さすぎて (仮数部の最上位ビットが 1 となる) 標準形では表現できないような値である。
+subnormal な値の表現では、仮数部の上位側のビットに 1 個以上の 0 が 含まれることになる。
.SH 注意
-C99 と POSIX.1-2001 で規定されている
-.I math_errhandling
-識別子は glibc ではサポートされていない。
.\" See CONFORMANCE in the glibc 2.8 (and earlier) source.
-この識別子は、2 つのエラー通知機構
-.RI ( errno
-と
-.BR fetestexcept (3)
-経由で取得できる例外) のうちどちらが使用されているかを通知
-することになっている。
-標準では、少なくとも一つは使用されることが要求されているが、
-両方とも利用可能であってもよいとされている。
-glibc での現在の (バージョン 2.8 での) 状況はかなり混乱している。
-ほとんどの関数 (ただし全部ではない) はエラー時に例外を上げる。
-いくつかの関数は
-.I errno
-も設定する。
-.I errno
-を設定するが、例外を上げない関数も少しだけ存在する。
-どちらも行わない関数もごく少数だが存在する。
-詳細については個々のマニュアルページを参照のこと。
+C99 と POSIX.1\-2001 で規定されている \fImath_errhandling\fP 識別子は glibc ではサポートされていない。
+この識別子は、2 つのエラー通知機構 (\fIerrno\fP と \fBfetestexcept\fP(3) 経由で取得できる例外)
+のうちどちらが使用されているかを通知 することになっている。 標準では、少なくとも一つは使用されることが要求されているが、
+両方とも利用可能であってもよいとされている。 glibc での現在の (バージョン 2.8 での) 状況はかなり混乱している。 ほとんどの関数
+(ただし全部ではない) はエラー時に例外を上げる。 いくつかの関数は \fIerrno\fP も設定する。 \fIerrno\fP
+を設定するが、例外を上げない関数も少しだけ存在する。 どちらも行わない関数もごく少数だが存在する。 詳細については個々のマニュアルページを参照のこと。
-.I errno
-と
-.BR fetestexcept (3)
-の両方を使ってエラーチェックを行うことで複雑になるのを避けるため、
-多くの場合、関数呼び出しを行う前に不正な引き数かのチェックを行う
-方法が推奨されている。
.\" http://www.securecoding.cert.org/confluence/display/seccode/FLP32-C.+Prevent+or+detect+domain+and+range+errors+in+math+functions
-例えば、以下のコードは、
-.BR log (3)
-の引き数が NaN でも (極エラーとなる) 0 でも (領域エラーとなる) 0 未満
-でもないことを保証するものである。
+\fIerrno\fP と \fBfetestexcept\fP(3) の両方を使ってエラーチェックを行うことで複雑になるのを避けるため、
+多くの場合、関数呼び出しを行う前に不正な引き数かのチェックを行う 方法が推奨されている。 例えば、以下のコードは、 \fBlog\fP(3) の引き数が
+NaN でも (極エラーとなる) 0 でも (領域エラーとなる) 0 未満 でもないことを保証するものである。
.in +4n
.nf
.fi
.in
-このページに書かれていることは、
-.RI ( <complex.h>
-で宣言されている) 複素数関数にはあてはまらない。
-一般に、C99 や POSIX.1-2001 ではこれらの関数がエラーを返すことを
-要求してない。
+このページに書かれていることは、 (\fI<complex.h>\fP で宣言されている) 複素数関数にはあてはまらない。 一般に、C99 や
+POSIX.1\-2001 ではこれらの関数がエラーを返すことを 要求してない。
-.BR gcc (1)
-の
-.I "-fno-math-errno"
-オプションを使うと、実行ファイルで、標準の実装よりも高速な数学関数の
-実装が使用されるようになるが、
-エラー時に
-.I errno
-が設定されない
-.RB ( gcc (1)
-の
-.I "-ffast-math"
-オプションを指定した場合にも
-.I "-fno-math-errno"
-は有効になる)。
-このオプションを指定した場合でも、
-.BR fetestexcept (3)
-を使ったエラーの検査は可能である。
+\fBgcc\fP(1) の \fI\-fno\-math\-errno\fP オプションを使うと、実行ファイルで、標準の実装よりも高速な数学関数の
+実装が使用されるようになるが、 エラー時に \fIerrno\fP が設定されない (\fBgcc\fP(1) の \fI\-ffast\-math\fP
+オプションを指定した場合にも \fI\-fno\-math\-errno\fP は有効になる)。 このオプションを指定した場合でも、
+\fBfetestexcept\fP(3) を使ったエラーの検査は可能である。
.SH 関連項目
-.BR gcc (1),
-.BR errno (3),
-.BR fenv (3),
-.BR fpclassify (3),
-.BR INFINITY (3),
-.BR isgreater (3),
-.BR matherr (3),
-.BR nan (3)
+\fBgcc\fP(1), \fBerrno\fP(3), \fBfenv\fP(3), \fBfpclassify\fP(3), \fBINFINITY\fP(3),
+\fBisgreater\fP(3), \fBmatherr\fP(3), \fBnan\fP(3)
.br
-.I "info libc"
+\fIinfo libc\fP
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。