EN JA
TGMATH(3)
TGMATH(3) FreeBSD Library Functions Manual TGMATH(3)

名称

tgmathタイプジェネリック (type-generic) マクロ

書式

#include < tgmath.h>

解説

ヘッダ < tgmath.h> は、 float (接尾辞は、 f) doublelong double (接尾辞は、 l) バージョンがある < math.h>< complex.h> 関数のためのタイプジェネリックマクロ (type-generic macros) を提供します。 3 つの関数のどれでも、それぞれ float, doublelong double のタイプのある引数は、 ジェネリック引数 と呼ばれます。

以下の規則は、タイプジェネリックマクロが呼び出されるなら、実際に呼び出される関数を説明しています。いずれかのジェネリック引数が long doublelong double complex のタイプを持つなら、 long double 関数が呼び出されます。そのほか、いずれかのジェネリック引数が double, double complex または整数タイプを持つなら、 double バージョンが呼び出されます。そうでなければ、マクロは、 float 実装に展開します。

次のテーブルのマクロのために、real と complex 関数の両方が存在しています。 real 関数は、 < math.h> でプロトタイプ宣言され、 < complex.h> の complex と同等です。 complex 関数は、ジェネリック引数のいずれかが complex 値であるなら呼び出されます。そうでなければ、real 同等関数が呼び出されます。

マクロ real 関数 complex 関数
acos() acos() cacos()
asin() asin() casin()
atan() atan() catan()
acosh() acosh() cacosh()
asinh() asinh() casinh()
atanh() atanh() catanh()
cos() cos() ccos()
sin() sin() csin()
tan() tan() ctan()
cosh() cosh() ccosh()
sinh() sinh() csinh()
tanh() tanh() ctanh()
exp() exp() cexp()
log() log() clog()
pow() pow() cpow()
sqrt() sqrt() csqrt()
fabs() fabs() cabs()

次のマクロのための complex 関数が存在していないので、ジェネリック引数へ complex を渡すことは、未定義のふるまいとなります:

atan2() fma() llround() remainder()
cbrt() fmax() log10() remquo()
ceil() fmin() log1p() rint()
copysign() fmod() log2() round()
erf() frexp() logb() scalbn()
erfc() hypot() lrint() scalbln()
exp2() ilogb() lround() tgamma()
expm1() ldexp() nextbyint() trunc()
fdim() lgamma() nextafter()
floor() llrint() nexttoward()

次のマクロは、常に complex 関数に展開します:

carg() cimag() conj() cproj() creal()

このヘッダは、 < complex.h>< math.h> を含んでいます。

規格

ヘッダ < tgmath.h> は、 ISO/IEC 9899:1999 (“ISO C99”) に適合しています。

歴史

ヘッダ < tgmath.h> は、 FreeBSD 5.3 ではじめて登場しました。

コンパイラのサポート

ISO/IEC 9899:2011 (“ISO C11”) 以前、ヘッダ < tgmath.h> は、厳密に適応する C コードを実装できませんでした、そして特別なコンパイラのサポートを必要としました。 ISO/IEC 9899:2011 (“ISO C11”) 以後は、 _Generic() 言語キーワードを使用して、このヘッダファイルを実装することができます。このキーワードをサポートするコンパイラに加えて、このヘッダファイルは、 GCC で動作します。

バグ

ここで述べられた関数の多くは、それらがまだ実装されていないとき、 < math.h> または < complex.h> でプロトタイプ宣言されていません。これは、まったく働かない対応するタイプジェネリック (type-generic) マクロを抑制します。
January 4, 2012 FreeBSD