C标准库<math.h>

C标准库<math.h>

1. 库定义

<math.h> 是ISO C标准定义的标准数学函数库头文件,为C语言程序提供通用数学运算接口,包含各类基础数学函数、数值处理函数及相关宏定义与类型定义,是C语言标准库的核心组成部分。

2. 核心功能

该库主要支持浮点型、双精度型、长双精度型数值的数学运算,覆盖以下运算范畴:

  • 三角函数与反三角函数
  • 双曲函数与反双曲函数
  • 指数函数、对数函数
  • 幂函数、平方根、立方根运算
  • 绝对值、取整、取余、取模运算
  • 浮点数分类、舍入、比较等辅助运算

所有函数遵循IEEE 754浮点数标准,保证跨平台运算一致性。

3. 标准数据类型与宏定义

常用类型

  • double:多数数学函数的默认参数与返回值类型
  • floatlong double:对应高精度版本函数支持

标准宏

  • HUGE_VAL:表示极大的浮点数值
  • INFINITY:无穷大常量
  • NAN:非数值常量
  • M_PI:圆周率π(部分编译器需开启宏定义支持)

4. 常用标准函数示例

(1)三角函数(单位:弧度)

double sin(double x);   // 正弦函数
double cos(double x);   // 余弦函数
double tan(double x);   // 正切函数
double asin(double x);  // 反正弦函数
double acos(double x);  // 反余弦函数
double atan(double x);  // 反正切函数

(2)指数与对数函数

double exp(double x);   	 // 自然指数 e^x
double log(double x);   	 // 自然对数 ln(x)
double log10(double x); 	 // 以10为底的对数

(3)幂与方根运算

double pow(double base, double exp); // 幂运算 base^exp
double sqrt(double x);  			 // 平方根
double cbrt(double x);  			 // 立方根

(4)绝对值与取整函数

double fabs(double x);    			// 浮点数绝对值
double floor(double x);   			// 向下取整
double ceil(double x);    			// 向上取整
double round(double x);   			// 四舍五入
double fmod(double x, double y); 	// 浮点数取余

5. 使用规范

  1. 使用前必须包含头文件:
#include <math.h>
  1. 部分编译环境(如GCC)链接时需添加数学库:
gcc program.c -o program -lm
  1. 函数输入参数需满足定义域约束,否则返回值域错误(如负数开方、对数输入负数)。
  2. 所有函数默认操作double类型,floatlong double版本函数后缀为f/l(如sinfsinl)。

参考资料:C 标准库 – | 菜鸟教程

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

int main() {
    double x = 2.0;
    double y = 3.0;

    // 基本运算
    printf("sqrt(%.1f) = %.2f\n", x, sqrt(x));
    printf("pow(%.1f, %.1f) = %.2f\n", x, y, pow(x, y));
    printf("exp(%.1f) = %.2f\n", x, exp(x));
    printf("log(%.1f) = %.2f\n", x, log(x));
    printf("log10(%.1f) = %.2f\n", x, log10(x));

    // 三角函数
    double angle = M_PI / 4; // 45 degrees
    printf("sin(%.2f) = %.2f\n", angle, sin(angle));
    printf("cos(%.2f) = %.2f\n", angle, cos(angle));
    printf("tan(%.2f) = %.2f\n", angle, tan(angle));

    // 舍入函数
    double z = 5.8;
    printf("ceil(%.1f) = %.1f\n", z, ceil(z));
    printf("floor(%.1f) = %.1f\n", z, floor(z));
    printf("fabs(%.1f) = %.1f\n", z, fabs(z));

    return 0;
}
sqrt(2.0) = 1.41
pow(2.0, 3.0) = 8.00
exp(2.0) = 7.39
log(2.0) = 0.69
log10(2.0) = 0.30
sin(0.79) = 0.71
cos(0.79) = 0.71
tan(0.79) = 1.00
ceil(5.8) = 6.0
floor(5.8) = 5.0
fabs(5.8) = 5.8
posted @ 2026-05-08 17:12  Q&25  阅读(39)  评论(0)    收藏  举报