数学库是一个庞大的库,而且数学函数的实现一般要涉及到特有的数值算法,因此这里也是作一个概述性的介绍。标准C中的数学库有3个头文件math.h, tgmath.h和complex.h,其中tgmath.h和complex.h是C99中引入的。标准C中定义的数学函数主要是初等函数,包括绝对值函数、高斯函数(即求最近整数)、指数函数、对数函数、幂函数、三角函数与反三角函数、双曲函数与反双曲函数等。非初等函数主要有误差函数、gamma函数及其自然对数。其他的还有浮点数分类函数、浮点数比较函数。glibc的数学库实现在math目录下。
数学函数在math.h中声明,复数运算及其函数在complex.h中声明。C99对每个数学函数增加了两个分别针对float和long double的版本,只要在函数名后加f和l即可。由于每个函数对不同的参数类型有多个版本,使用起来不方便,因此C99在tgmath.h中定义了通用类型宏,这些宏与原始的针对double类型的数学函数同名,它会根据传过来的实参类型自动调用多个版本中的某一个版本。若函数结果无法表示为返回类型的值,则errno设置为ERANGE,并返回该类型的同符号的最大可浮点数值,在C89中为宏HUGE_VAL的值,C99中还提供了宏HUGE_VALF,HUGE_VALL。
math.h中所有的标准函数接口如下:
1、abs,labs,llabs,div,ldiv,lldiv:整型的绝对值,及除法运算,这些数学函数在stdlib.h中定义。
2、fabs:返回double型参数的绝对值,C99中增加了对应的f版本和l版本。
3、ceil,floor,lrint,llrint,lround,llround,mearbyint,round,rint,trunc:计算与浮点数参数接近的整数&#x