Skip to content

math.h

<math.h> 是 C 标准库中的一个头文件,包含了大量用于数学运算的函数和宏。这些函数和宏提供了基本的算术运算、三角函数、指数函数、对数函数、幂函数、舍入函数等。

在这个库中所有可用的功能都带有一个 double 类型的参数,且都返回 double 类型的结果。

引入头文件

cpp
#include <math.h>

数据结构

常用

cpp
#define M_PI        3.14159265358979323846264338327950288   /* pi */

pow

返回 x 的 y 次幂。

cpp
double pow(double x, double y)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = pow(2, 3);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 8.000000

sqrt

返回 x 的平方根。

cpp
double sqrt(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = sqrt(9);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 3.000000

ceil

向上取整,返回大于或等于 x 的最小的整数值。

cpp
double ceil(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = ceil(9.1);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 10.000000

floor

向下取整,返回小于或等于 x 的最大的整数值。

cpp
double floor(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = floor(9.9);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 9.000000

fabs

返回 x 的绝对值。

cpp
double fabs(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = fabs(-9.0);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 9.000000

fmod

返回 x 除以 y 的余数。

cpp
double fmod(double x, double y)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = fmod(9.0, 4.0);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
% gcc main.c -o main && ./main
result: 1.000000

modf

返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。

cpp
double modf(double x, double *integer)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double intpart;
    double result = modf(3.14, &intpart);
    printf("result: %f\n", result);
    printf("intpart: %f\n", intpart);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 0.140000
intpart: 3.000000

acos

返回以弧度表示的 x 的反余弦。

cpp
/**
 * 参数
 *   x -- 一个介于 -1 和 1 之间的浮点数。
 * 返回值
 *   返回 x 的反余弦值,以弧度为单位。返回值的范围是 [0, π]。
 *   如果 x 不在 [-1, 1] 范围内,函数将返回 NaN,并设置适当的数学错误(例如 EDOM)。
 */
double acos(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = acos(0.5);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 1.047198

asin

返回以弧度表示的 x 的反正弦。

cpp
/**
 * 参数
 *   x -- 一个介于 -1 和 1 之间的浮点数。
 * 返回值
 *   返回 x 的反正弦值,以弧度为单位。返回值的范围是 [-π/2, π/2]。
 *   如果 x 不在 [-1, 1] 范围内,函数将返回 NaN,并设置适当的数学错误(例如 EDOM)。
 */
double asin(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = asin(0.5);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 0.523599

atan

返回以弧度表示的 x 的反正切。

cpp
/**
 * 参数
 *   x -- 浮点值。
 * 返回值
 *   返回 x 的反正切值,以弧度为单位。返回值的范围是 [-π/2, π/2]。
 */
double atan(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = atan(0.5);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 0.463648

atan2

返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。

cpp
/**
 * 参数
 *   x -- 代表 x 轴坐标的浮点值。
 *   y -- 代表 y 轴坐标的浮点值。
 * 返回值
 *   返回点 (x, y) 的反正切值,以弧度为单位。返回值的范围是 [-π, π]。
 */
double atan2(double y, double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = atan2(0.5, 0.5);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 0.785398

cos

返回弧度角 x 的余弦。

cpp
/**
 * 参数
 *   x:以弧度为单位的角度,类型为 double、float 或 long double。
 * 返回值
 *   返回 x 的余弦值,范围是 [-1, 1]。
 */
double cos(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = cos(60 * M_PI / 180.0);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 0.500000

cosh

返回 x 的双曲余弦。

cpp
/**
 * 参数
 *   x -- 输入的实数,表示双曲余弦函数的自变量。
 * 返回值
 *   该函数返回 x 的双曲余弦。
 */
double cosh(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = cosh(0.5);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 1.127626

sin

返回弧度角 x 的正弦。

cpp
/**
 * 参数
 *   x:以弧度为单位的角度,类型可以是 double、float 或 long double。
 * 返回值
 *   该函数返回 x 的正弦,范围是 [-1, 1]。
 */
double sin(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = sin(45.0 * M_PI / 180);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 0.707107

sinh

返回 x 的双曲正弦。

cpp
/**
 * 参数
 *   x -- 输入的实数,表示双曲正弦函数的自变量。
 * 返回值
 *   该函数返回 x 的双曲正弦。
 */
double sinh(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = sinh(0.5);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
$ gcc main.c -o main && ./main
result: 0.521095

tanh

返回 x 的双曲正切。

cpp
/**
 * 参数
 *   x -- 输入的实数,表示双曲正切函数的自变量。
 * 返回值
 *   该函数返回 x 的双曲正切。结果的范围是 [-1, 1]。
 */
double tanh(double x)

示例

cpp
#include <stdio.h>
#include <math.h>

int main()
{
    double result = tanh(0.5);
    printf("result: %f\n", result);
    return 0;
}

运行结果

shell
gcc main.c -o main && ./main
result: 0.462117

exp

返回 e 的 x 次幂的值。

cpp
double exp(double x)

示例

cpp

运行结果

shell

frexp

把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。

cpp
double frexp(double x, int *exponent)

示例

cpp

运行结果

shell

ldexp

返回 x 乘以 2 的 exponent 次幂。

cpp
double ldexp(double x, int exponent)

示例

cpp

运行结果

shell

log

返回 x 的自然对数(基数为 e 的对数)。

cpp
double log(double x)

示例

cpp

运行结果

shell

log10

返回 x 的常用对数(基数为 10 的对数)。

cpp
double log10(double x)

示例

cpp

运行结果

shell