C 程式設計/tgmath.h
外觀
< C 程式設計
tgmath.h 是一個 標準 C 標頭檔案,它定義了許多型別通用的 宏,這些宏可用於各種數學運算。此標頭檔案還包含 math.h 和 complex.h。對於 math.h 和 complex.h 標頭檔案中所有沒有 f (float) 或 l (long double) 字尾的函式,並且其對應型別為 double (modf() 除外),都有相應的宏。[1]
型別通用宏是允許呼叫型別由宏中引數型別決定的函式的東西。這意味著,例如,x 被宣告為 int 資料型別,但 已被以這種方式呼叫
tan((float)x)
那麼此表示式將具有型別 float[2]。
此外,如果型別通用宏的任何引數或引數是複數,它將呼叫複數函式,否則將呼叫實數函式。最終,呼叫的函式型別取決於引數的最終轉換型別。[3]。
下面的流程圖顯示了 tgmath.h 的依賴關係圖。[4]

下面列出的函式僅處理實數引數並返回實數輸出。如果將複數引數傳遞給這些函式,則會返回 NaN 或其他特殊數字。[5]。
| 名稱 | 描述 |
|---|---|
acos |
反餘弦 |
asin |
反正弦 |
atan |
單引數反正切 |
atan2 |
雙引數反正切 |
ceil |
向上取整,不小於引數的最小整數 |
cos |
餘弦 |
cosh |
雙曲餘弦 |
exp |
指數函式 |
fabs |
浮點數的絕對值 |
floor |
向下取整,不大於引數的最大整數 |
fmod |
浮點數的餘數 |
frexp |
將數字分解為有效數字和 2 的冪 |
ldexp |
按指數縮放浮點數 (參見文章) |
log |
自然對數 |
log10 |
以 10 為底的對數 |
modf(x,p) |
返回 x 的小數部分,並將整數部分儲存在指標 p 指向的位置 |
pow(x,y) |
將 x 提高到 y 的冪,xy |
sin |
正弦 |
sinh |
雙曲正弦 |
sqrt |
平方根,返回該數字的非負平方根 |
tan |
正切 |
tanh |
雙曲正切 |
isgreater |
如果 x > y,則返回 1,否則返回 0 |
isnan(x) |
如果 x 是 NaN (非數字),則返回 1 |
islessequal |
如果 x 小於或等於 y,則返回 1,否則返回 0 |
isinf(x) |
表示 x 是否為無窮大 |
signbit |
表示 x 是否為負數 (如果 x 小於 0,則返回 8,否則返回 0) |
下面定義的函式處理複數引數,但不返回複數輸出。[5]。
| 名稱 | 描述 |
|---|---|
cacos |
反餘弦 |
casin |
反正弦 |
catan |
單引數反正切 |
catan2 |
雙引數反正切 |
cceil |
向上取整,不小於引數的最小整數 |
ccos |
餘弦 |
ccosh |
雙曲餘弦 |
cexp |
指數函式 |
cabs |
複數浮點數的絕對值 |
cfloor |
向下取整,不大於引數的最大整數 |
cfmod |
浮點數的餘數 |
cfrexp |
將數字分解為有效數字和 2 的冪 |
cldexp |
按指數縮放浮點數 (參見文章) |
clog |
自然對數 |
clog10 |
以 10 為底的對數 |
cmodf(x,p) |
返回 x 的小數部分,並將整數部分儲存在指標 p 指向的位置 |
cpow(x,y) |
將 x 提高到 y 的冪,xy |
csin |
正弦 |
csinh |
雙曲正弦 |
csqrt |
平方根,返回該數字的非負平方根 |
ctan |
正切 |
ctanh |
雙曲正切 |
以下程式碼演示了 tgmath.h 中定義的 atan 函式的使用,該函式計算在正切域中定義的數字的反正切。
#include <stdio.h>
#include <tgmath.h>
int main()
{
float ang, ans;
scanf("%f", &ang);
ans = atan(ang);
printf("%0.3f\n", ans);
return 0;
}
這裡定義的類似函式在計算“棘手”數字的返回值時存在顯著差異。例如,使用 sqrt 計算 -25 的平方根返回 -NaN (非數字),而 csqrt 返回 0.000000。在其他函式中也可能注意到此類差異。
此標頭檔案主要在計算數學函式時包含。由於它包含了 math.h 和 complex.h,因此解決了由於輸入不一致而產生的問題。單獨包含任何標頭檔案都會導致某些輸入的輸出不一致。
- ↑ http://www.opengroup.org/onlinepubs/009695399/basedefs/tgmath.h.html
- ↑ http://manpages.ubuntu.com/manpages/hardy/man7/tgmath.h.7posix.html
- ↑ http://www.qnx.com/developers/docs/6.4.1/dinkum_en/c99/tgmath.html
- ↑ http://www-zeuthen.desy.de/apewww/APE/software/nlibc/html/tgmath_8h.html
- ↑ a b http://pubs.opengroup.org/onlinepubs/009604599/basedefs/tgmath.h.html