TGMATH(3) |
FreeBSD Library Functions Manual |
TGMATH(3) |
名称
tgmath —
タイプジェネリック (type-generic) マクロ
解説
ヘッダ
< tgmath.h> は、
float (接尾辞は、
f)
double と
long double (接尾辞は、
l) バージョンがある
< math.h> と
< complex.h> 関数のためのタイプジェネリックマクロ (type-generic macros) を提供します。 3 つの関数のどれでも、それぞれ
float,
double と
long double のタイプのある引数は、
ジェネリック引数 と呼ばれます。
以下の規則は、タイプジェネリックマクロが呼び出されるなら、実際に呼び出される関数を説明しています。いずれかのジェネリック引数が long double か long 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) マクロを抑制します。