跳转到内容

C 编程/math.h

来自 Wikibooks,开放世界中的开放书籍

math.h 是 C 编程语言标准库中的一个头文件,用于基本的数学运算。大多数函数都涉及浮点数的使用。C++ 为了兼容性也实现了这些函数,并在头文件 cmath 中声明它们(当前 C++ 标准 C++ 98 中不可用 C99 函数)。

所有接受或返回角度的函数都以弧度为单位工作。

所有函数都接受 double 作为浮点参数,除非另有说明。在 C99 中,要使用 floatlong double,分别在名称后附加 fl

对整数进行操作的数学库函数,如 abslabsdivldiv,在 stdlib.h 头文件中指定。

C99 之前的函数

[编辑 | 编辑源代码]
名称 描述
acos 反余弦
asin 反正弦
atan 单参数反正切
atan2 双参数反正切
ceil 向上取整,小于等于参数的最小整数
cos 余弦
cosh 双曲余弦
cbrt 立方根
exp 指数函数
fabs 绝对值(浮点数的)
floor 向下取整,大于等于参数的最大整数
fmod 浮点余数: x - y*(int)(x/y)
frexp 将浮点数分解为尾数和指数
ldexp 用指数缩放浮点数(参见文章)
log 自然对数
log10 以 10 为底的对数
modf(x,p) 返回x的小数部分并将整数部分存储在指针p指向的位置
pow(x,y) x提高到y的幂,xy
sin 正弦
sinh 双曲正弦
sqrt 平方根
tan 正切
tanh 双曲正切]]

(有关将字符串转换为浮点数的函数(atof()、strtod() 等),请参见 C 编程/C 参考/stdlib.h。)

(有关将浮点数转换为字符串的函数(snprintf()、itoa() 等),请参见 C 编程/C 参考/stdio.h 和 C_Programming/C_Reference/stdlib.h#itoa。)

C99 函数

[编辑 | 编辑源代码]
名称 描述
acosh 反双曲余弦
asinh 反双曲正弦
atanh 反双曲正切
cbrt 立方根
copysign(x,y) 返回具有y符号的x的值
erf 误差函数
erfc 互补误差函数
exp2(x) 将 2 提高到x的幂,2x
expm1(x) x的指数减 1,ex − 1
fdim(x,y) xy之间的正差,fmax(xy, 0)
fma(x,y,z) 乘加,(x * y) + z
fmax(x,y) xy的最大值
fmin(x,y) xy的最小值
hypot(x,y) 斜边,sqrt(x2 + y2)
ilogb 浮点值的指数,转换为 int
lgamma 伽马函数绝对值的自然对数
llrint 四舍五入到整数(返回 long long),使用当前舍入模式
lrint 四舍五入到整数(返回 long),使用当前舍入模式
llround 四舍五入到整数(返回 long long
lround 四舍五入到整数(返回 long
log1p(x) 1 + x的自然对数
log2 以 2 为底的对数
logb 从浮点数中提取指数
nan(s) 返回 NaN,可能使用字符串参数
nearbyint 将浮点数四舍五入到最接近的整数
nextafter(x,y) 返回x之后的下一个可表示的值(朝着y方向)
nexttoward(x,y) nextafter 相同,除了y始终是 long double
remainder(x,y) 计算余数,如 IEC 60559 所要求
remquo(x,y,p) remainder 相同,但将商数(作为 int)存储在指针p的目标位置
rint 四舍五入到整数(返回 double),使用当前舍入模式
round 四舍五入到整数(返回 double),将一半情况四舍五入到远离零的方向
scalbln(x,n) x * FLT_RADIXn (nlong)
scalbn(x,n) x * FLT_RADIXn (nint)
tgamma 伽马函数
trunc 截断浮点数

XSI 扩展

[编辑 | 编辑源代码]

可能还提供额外的函数作为 X/Open 系统接口扩展。这些在任何 ANSI 或 ISO C 标准中都不存在。

名称 描述
j0(x) x的 0 阶第一类贝塞尔函数
j1(x) x的 1 阶第一类贝塞尔函数
jn(n,x) xn阶第一类贝塞尔函数
scalb(x,y) x * FLT_RADIXy (xy 都是 double)
y0(x) x的 0 阶第二类贝塞尔函数
y1(x) x的 1 阶第二类贝塞尔函数
yn(n,x) xn阶第二类贝塞尔函数

double-to-string 转换函数 ecvtfcvtgcvt 已被弃用,取而代之的是 sprintf

数学常数(非标准)

[编辑 | 编辑源代码]
名称 描述
M_E 自然对数的底。
M_LOG2E M_E 以 2 为底的对数。
M_LOG10E M_E 以 10 为底的对数。
M_LN2 2 的自然对数。
M_LN10 10 的自然对数。
M_PI 圆周率,圆周长与其直径的比值。
M_PI_2 圆周率除以二。
M_PI_4 圆周率除以四。
M_1_PI 圆周率的倒数(1/pi)。
M_2_PI 圆周率倒数的两倍。
M_2_SQRTPI 圆周率平方根的倒数的两倍。
M_SQRT2 2 的平方根。
M_SQRT1_2 2 的平方根的倒数(也是 1/2 的平方根)。

所有值都是 double 类型。作为扩展,GNU C 库还定义了这些类型的 long double 常量。long double 宏在其名称后附加小写“l”:M_El、M_PIl 等。这些仅在定义 _GNU_SOURCE 时可用。

注意:某些程序使用名为 PI 的常量,它与 M_PI 的值相同。此常量不是标准的;它可能出现在一些旧的 AT&T 头文件中,并在 Stroustrup 的 C++ 著作中有所提及。它侵犯了用户命名空间,因此 GNU C 库没有定义它。修复为期望它的程序很简单:在整个程序中将 PI 替换为 M_PI,或在编译器命令行中添加“ -DPI=M_PI”。

虽然这些常量很常见,但它们不是 C 标准的一部分,因此大多数现代编译器需要显式定义(例如 Microsoft Visual C++ 中的 _USE_MATH_DEFINES[1])才能在包含 math.h 时定义它们。

[编辑 | 编辑源代码]

参考文献

[编辑 | 编辑源代码]
  1. 数学常量,MSDN。
华夏公益教科书