C 标准库 - <math.h>详解

简介: `<math.h>` 是 C 标准库中的头文件,提供了丰富的数学计算函数和常量。重要常量包括自然常数 `M_E` 和圆周率 `M_PI`。常用函数涵盖指数、对数、幂、平方根、三角及反三角函数等,如 `exp`、`log`、`pow`、`sqrt`、`sin`、`cos` 等。

<math.h> 是 C 标准库中的头文件,提供了一系列用于数学计算的函数和常量。以下是该头文件的详细介绍,包括常用的函数、宏以及其使用方式。

重要常量

  • M_E: 自然常数 ( e ) 的值(约为 2.71828)。
  • M_PI: 圆周率 ( \pi ) 的值(约为 3.14159)。

常用函数

以下是一些常用的数学函数,它们通常接受 double 类型的参数,并返回 double 类型的结果:

  1. 指数和对数函数

    • double exp(double x);
      • 计算 ( e^x ) 的值。
    • double log(double x);
      • 计算自然对数(以 ( e ) 为底)的值。如果需要计算以 10 为底的对数,可使用 log10
    • double log10(double x);
      • 计算以 10 为底的对数。
  2. 幂和平方根函数

    • double pow(double x, double y);
      • 计算 ( x^y ) 的值。
    • double sqrt(double x);
      • 计算 ( x ) 的平方根。
  3. 三角函数

    • double sin(double x);
    • double cos(double x);
    • double tan(double x);
    • double asin(double x);
    • double acos(double x);
    • double atan(double x);
  4. 反三角函数

    • double atan2(double y, double x);
      • 计算从 ( x ) 轴到点 ( (x, y) ) 的角度。
  5. 其他数学函数

    • double ceil(double x);
      • 返回大于或等于 ( x ) 的最小整数值。
    • double floor(double x);
      • 返回小于或等于 ( x ) 的最大整数值。
    • double round(double x);
      • 返回四舍五入后的整数值。
    • double fabs(double x);
      • 计算 ( x ) 的绝对值。

示例

下面是一个使用 <math.h> 的简单示例,演示了如何使用一些基本的数学函数:

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

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

    printf("exp(%f) = %f\n", x, exp(x));
    printf("log(%f) = %f\n", x, log(x));
    printf("pow(%f, %f) = %f\n", x, y, pow(x, y));
    printf("sqrt(%f) = %f\n", x, sqrt(x));
    printf("sin(%f) = %f\n", x, sin(x));
    printf("cos(%f) = %f\n", x, cos(x));
    printf("tan(%f) = %f\n", x, tan(x));

    return 0;
}

注意事项

  • 在使用 <math.h> 中的函数时,如果参数是负数(例如对数和平方根函数),它们的结果是未定义的,通常会返回 NaN(不是一个数字)。
  • 数学函数通常会采用弧度制进行计算,因此在使用三角函数时需要确保输入的角度是以弧度为单位。
  • 某些平台对高精度数学计算有额外的实现和限制,使用时需注意。

结论

<math.h> 提供了一整套便捷的数学计算功能,是 C 编程中不可或缺的工具之一。在编写涉及数学运算的程序时,理解和使用这些函数可以大大提高代码的效率和准确性。

相关文章
|
9月前
|
自然语言处理 安全 C++
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
5618 3
|
9月前
|
存储 人工智能 编解码
AI 消灭软件工程师?| 新程序员
AI 是否会取代软件工程师”是自大模型爆火以来程序员们最为关心的一大话题,事关编程的未来与我们每一位程序员。本文作者 Babel CEO、多年的资深程序员张海龙深入技术本质,为我们进行了答疑解惑。本文转载自CSDN:https://mp.weixin.qq.com/s/omx6B80D9Uz4mfnM8dvDeg。自从大模型出现以来,程序员界人人自危,这篇文章也是很好的解答了大家的一些困惑,分享一起学习。
|
5月前
|
异构计算 Python
StableDiffusionPipeline
【9月更文挑战第22天】
259 77
|
5月前
|
机器学习/深度学习 数据采集 自然语言处理
使用Python实现深度学习模型:智能社交媒体内容分析
使用Python实现深度学习模型:智能社交媒体内容分析
731 69
|
5月前
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
94 5
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
|
5月前
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
125 5
|
5月前
|
Java
静态方法和实例方法的区别是什么?
静态方法和实例方法的区别是什么?
638 5
|
5月前
|
程序员 开发者 Python
探索Python中的装饰器:从基础到高级应用
本文旨在全面解析Python中一个强大而灵活的特性——装饰器(Decorators)。我们将从装饰器的基本定义出发,逐步深入到它们的高级应用。通过具体的代码示例和详细的解释,读者将能够掌握如何有效地使用装饰器来增强函数和类的功能,以及如何创建自定义装饰器来解决特定问题。无论是Python初学者还是经验丰富的开发者,都能在本文中找到有价值的内容,以提升编程技巧和代码质量。
110 1
|
5月前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
483 4
|
6月前
|
存储 监控 NoSQL
结合通义千问对CentOS靶机进行入侵排查
本文介绍了一种在Linux系统中记录所有登录用户操作历史的方法,通过在/etc/profile中添加脚本代码,每次用户登录时会自动生成一个包含该用户操作历史的文件。同时,文章还提供了多种查看系统登录记录和日志的方法,如使用last, last -f /var/log/wtmp和cat /var/log/secure | grep 可疑IP等命令,帮助管理员监控系统活动和排查异常行为。此外,通过rpm -Va命令可检查文件完整性,识别可能存在的安全隐患。