【C++Builder】C ランタイムライブラリリファレンス (tgmath.h)

# 型総称数学関数 (Type-Generic Mathematics)

| ヘッダ<br>ファイル | [tgmath.h](https://docwiki.embarcadero.com/RADStudio/ja/Tgmath.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | C99 |
| 概要 |  ヘッダ [math.h](https://qiita.com/ht_deko/items/8d27e3713d2b8ecd3f33) 及び [complex.h](https://qiita.com/ht_deko/items/13156a7e966b110ad6f8) を取り込み、幾つかの型総称マクロを定義する。  |

:::note
...つまり `tgmath.h` をインクルードする場合、`math.h` や `complex.h` のインクルードは不要です。
:::

## プラグマ

## 型

## マクロ

## 引数付きマクロ

型総称 (ジェネリック) マクロです。引数を判断して `math.h` や `complex.h` で定義されている末尾に `f` `l` の付く関数に自動で展開します (`modf()`, `nan()` を除く)。

`complex.h` で定義されている先頭に `c` の付く関数も `c` が不要になります (`carg()`, `cimag()`, `cproj()`, `creal()` を除く)。

| 名前 | 機能 |
|:---|:---|
| acos()       | 逆余弦を求めます。  |
| acosh()      | 逆双曲線余弦を求めます。  |
| asin()       | 逆正弦を求めます。  |
| asinh()      | 逆双曲線正弦を求めます。  |
| atan()       | 逆正接を求めます。  |
| atan2()      | 逆正接を求めます。  |
| atanh()      | 逆双曲線正接を求めます。  |
| carg()       | 複素数偏角。 |
| cbrt()       | 立方根を計算します。  |
| ceil()       | 小数点以下を切り上げます。  |
| cimag()      | 複素数虚部。 |
| conj()       | 共役複素数。 |
| copysign()   | x の絶対値で y の符号を持つ値を生成します。  |
| cos()        | 余弦を求めます。  |
| cosh()       | 双曲線余弦を求めます。  |
| cproj()      | リーマン射影。 |
| creal()      | 複素数実部。 |
| erf()        | 誤差関数を計算します。  |
| erfc()       | 余誤差関数を計算します。  |
| exp()        | e（自然対数の底）の x 乗を計算します。  |
| exp2()       | 2 の x 乗を計算します。  |
| expm1()      | 自然対数の底 e の x 乗から 1 を引いた値を計算します。  |
| fabs()       | 浮動小数点数の絶対値を返します。  |
| fdim()       | x と y の正の差を求めます。  |
| floor()      | 小数点以下を切り捨てます。  |
| fma()        | (x*y)+z を 1 個の 3 項演算としてまとめて計算します (FMA)。  |
| fmax()       | x と y のうち、大きい方の値を求めます。  |
| fmin()       | x と y のうち、小さい方の値を求めます。  |
| fmod()       | x を y で割った剰余を計算します。  |
| frexp()      | 数値を仮数部と指数部に分割します。  |
| hypot()      | 直角三角形の斜辺 (x<sup>2</sup> + y<sup>2</sup> の平方根) を計算します。  |
| ilogb()      | 符号付き整数の値として x の指数を抽出します。  |
| ldexp()      | x * 2^exp を計算します。  |
| lgamma()     | ガンマ関数の絶対値の自然対数を計算します。  |
| llround()    | 最も近い整数値に丸めます。戻り値の型は long long int です。  |
| log()        | x の自然対数を計算します。  |
| log10()      | 10 を底とする x の対数を計算します。  |
| log1p()      | 1 を加えた値の e を底とする (自然) 対数を計算します。  |
| log2()       | 2 を底とする x の対数を計算します。  |
| logb()       | 浮動小数点形式における符号付き整数の値として x の指数を抽出します。  |
| lrint()      | その時点の丸め方向に従って最も近い整数値に丸めます。  |
| lround()     | 最も近い整数値に丸めます。戻り値の型は long int です。  |
| nearbyint()  | "不正確結果" 浮動小数点例外を生成することなく、丸め方向に従って浮動小数点形式の整数値に丸めます。  |
| nextafter()  | x と y を関数の型に変換し、実軸上で x から見て y の方向にある x の次に表現可能な値を求めます。  |
| nexttoward() | 2 番目の引数の型が long double に固定され、x が y と等しい場合に y をその関数の型に変換して返す事を除いて nextafter() と同じです。  |
| pow()        | x の y 乗を計算します。  |
| remainder()  | IEEE 60559 が要求する x と y の剰余 (REM) を計算します。  |
| remquo()     | 符号と商の近似値を持つ値を、*quo に格納する事を除いて remainder() と同じです。  |
| rint()       | 結果が実引数の値と異なる場合、"不正確結果" 浮動小数点例外を生成することがある事を除いて nearbyint() と同じです。  |
| round()      | 浮動小数点形式の最も近い整数値に丸めます。  |
| scalbln()    | 効率よく x * `FLT_RADIX` ^ n を計算します。戻り値の型は long int です。  |
| scalbn()     | 効率よく x * `FLT_RADIX` ^ n を計算します。戻り値の型は int です。  |
| sin()        | 正弦を求めます。  |
| sinh()       | 双曲線正弦を求めます。  |
| sqrt()       | 正の平方根を計算します。  |
| tan()        | 正接を求めます。  |
| tanh()       | 双曲線正接を求めます。  |
| tgamma()     | x のガンマ関数を計算します。  |
| trunc()      | 浮動小数点形式の最も近い整数値に丸めます。  |

:::note warn
型総称マクロを C 言語で記述する事はできないため、C99 では自分で書いた関数を型総称化する事はできません。C11 以降の総称選択 (`_Generic`) を使えば型総称マクロを記述可能です。
:::


## 関数

## 資料

 - [C 言語 / 標準ライブラリ / tgmath.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/tgmath.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス tgmath.h &#x2014; 数学および複合データ型 (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-tgmathh-mathematics-complex-data-type)
 - [C 言語の標準ヘッダ一覧 tgmath.h (C 言語)](http://www.c-lang.org/detail/tgmath_h.html)

---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)

---