C语言数学函数库<math.h>的常用函数讲解

math函数

  • 一. 基础数学函数
    • 1. `fabs(double x)` — 绝对值
    • 2. `fmod(double x, double y)` — 余数
    • 3. `pow(double x, double y)` — 幂运算
    • 4. `sqrt(double x)` — 平方根
    • 5. `cbrt(double x)` — 立方根
    • 6. `hypot(double x, double y)` — 计算斜边
  • 二. 对数和指数函数
    • 1. `exp(double x)` — 指数
    • 2. `log(double x)` — 自然对数
    • 3. `log10(double x)` — 常用对数
    • 4. `log2(double x)` — 二进制对数
  • 三. 三角函数
    • 1. `sin(double x)` — 正弦
    • 2. `cos(double x)` — 余弦
    • 3. `tan(double x)` — 正切
  • 四. 舍入函数
    • 1. `ceil(double x)` — 向上取整
    • 2. `floor(double x)` — 向下取整
  • 总结
    • 1. 基本数学运算
    • 2. 对数和指数运算
    • 3. 三角函数
    • 4. 取整与舍入
    • 5. 特殊数学函数
    • 6. 常量
      • 使用注意事项

在 C 语言中,math.h 是标准库中用于数学运算的头文件,提供了许多数学相关的函数。这些函数非常实用,可以帮助我们处理各种数学计算,如幂运算、三角函数、对数、取整等。在这里我整理了 math.h 中常用函数的分类及讲解:

一. 基础数学函数

这些函数是数学运算中最基本的操作,涵盖了绝对值、幂运算、平方根等。

1. fabs(double x) — 绝对值

  • 功能:计算一个浮点数 x 的绝对值。
  • 返回值:返回 x 的绝对值,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = fabs(-5.4);printf("Absolute value: %.2f\n", result);  // 输出: 5.40return 0;
    }
    

2. fmod(double x, double y) — 余数

  • 功能:计算 x 除以 y 的余数,类似于取模操作。
  • 返回值:返回 x 除以 y 的余数,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = fmod(5.3, 2.0);printf("Remainder: %.2f\n", result);  // 输出: 1.30return 0;
    }
    

3. pow(double x, double y) — 幂运算

  • 功能:计算 xy 次幂,即 x^y
  • 返回值:返回 x^y 的结果,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = pow(2.0, 3.0);printf("Power: %.2f\n", result);  // 输出: 8.00return 0;
    }
    

4. sqrt(double x) — 平方根

  • 功能:计算一个数的平方根。
  • 返回值:返回 x 的平方根,类型为 double。如果 x 为负数,会返回 NaN(Not a Number)。
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = sqrt(16.0);printf("Square root: %.2f\n", result);  // 输出: 4.00return 0;
    }
    

5. cbrt(double x) — 立方根

  • 功能:计算一个数的立方根。
  • 返回值:返回 x 的立方根,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = cbrt(27.0);printf("Cube root: %.2f\n", result);  // 输出: 3.00return 0;
    }
    

6. hypot(double x, double y) — 计算斜边

  • 功能:计算直角三角形的斜边长度,即 sqrt(x^2 + y^2)
  • 返回值:返回计算结果,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = hypot(3.0, 4.0);printf("Hypotenuse: %.2f\n", result);  // 输出: 5.00return 0;
    }
    

二. 对数和指数函数

这类函数用于对数运算和指数运算。

1. exp(double x) — 指数

  • 功能:计算自然常数 e(约 2.718)为底的 x 次幂,即 e^x
  • 返回值:返回 e^x 的值,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = exp(1.0);printf("Exp: %.2f\n", result);  // 输出: 2.72return 0;
    }
    

2. log(double x) — 自然对数

  • 功能:计算 x 的自然对数,即 log_e(x)
  • 返回值:返回 x 的自然对数,类型为 double。如果 x 小于等于 0,返回 NaN
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = log(2.71828);  // 近似于 eprintf("Natural log: %.2f\n", result);  // 输出: 1.00return 0;
    }
    

3. log10(double x) — 常用对数

  • 功能:计算 x 的常用对数,即以 10 为底的对数。
  • 返回值:返回 x 的常用对数,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = log10(100.0);printf("Log base 10: %.2f\n", result);  // 输出: 2.00return 0;
    }
    

4. log2(double x) — 二进制对数

  • 功能:计算 x 的以 2 为底的对数。
  • 返回值:返回 x 的二进制对数,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = log2(8.0);printf("Log base 2: %.2f\n", result);  // 输出: 3.00return 0;
    }
    

三. 三角函数

三角函数是数学中常见的操作,特别是在几何、物理和工程学中。

1. sin(double x) — 正弦

  • 功能:计算 x 的正弦值,x 是弧度。
  • 返回值:返回 x 的正弦值,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = sin(M_PI / 2);printf("Sin: %.2f\n", result);  // 输出: 1.00return 0;
    }
    

2. cos(double x) — 余弦

  • 功能:计算 x 的余弦值,x 是弧度。
  • 返回值:返回 x 的余弦值,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = cos(0);printf("Cos: %.2f\n", result);  // 输出: 1.00return 0;
    }
    

3. tan(double x) — 正切

  • 功能:计算 x 的正切值,x 是弧度。
  • 返回值:返回 x 的正切值,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = tan(M_PI / 4);printf("Tan: %.2f\n", result);  // 输出: 1.00return 0;
    }
    

四. 舍入函数

这些函数帮助我们对浮点数进行取整、舍入等操作。

1. ceil(double x) — 向上取整

  • 功能:返回大于或等于 x 的最小整数值。
  • 返回值:返回一个浮点数,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = ceil(3.2);printf("Ceil: %.2f\n", result);  // 输出: 4.00return 0;
    }
    

2. floor(double x) — 向下取整

  • 功能:返回小于或等于 x 的最大整数值。
  • 返回值:返回一个浮点数,类型为 double
  • 示例
    #include <math.h>
    #include <stdio.h>int main() {double result = floor(3.8);printf("Floor: %.2f\n", result);  // 输出: 3.00return 0;
    }
    

总结

1. 基本数学运算

函数名描述示例
double fabs(double x)计算浮点数的绝对值。fabs(-3.5) 返回 3.5
double fmod(double x, double y)计算 x 除以 y 的余数。fmod(5.3, 2) 返回 1.3
double pow(double x, double y)计算 xy 次幂。pow(2, 3) 返回 8.0
double sqrt(double x)计算平方根。sqrt(16) 返回 4.0
double cbrt(double x)计算立方根。cbrt(27) 返回 3.0
double hypot(double x, double y)计算直角三角形的斜边长度,即 sqrt(x² + y²)hypot(3, 4) 返回 5.0

2. 对数和指数运算

函数名描述示例
double exp(double x)计算 e 的 x 次幂,即 e^xexp(1) 返回 2.71828
double log(double x)计算自然对数(以 e 为底)。log(2.71828) 返回约 1.0
double log10(double x)计算以 10 为底的对数。log10(100) 返回 2.0
double log2(double x)计算以 2 为底的对数。log2(8) 返回 3.0

3. 三角函数

函数名描述示例
double sin(double x)计算正弦值,参数为弧度制。sin(M_PI / 2) 返回 1.0
double cos(double x)计算余弦值,参数为弧度制。cos(0) 返回 1.0
double tan(double x)计算正切值,参数为弧度制。tan(M_PI / 4) 返回 1.0
double asin(double x)计算反正弦,返回值为弧度。asin(1) 返回 M_PI / 2
double acos(double x)计算反余弦,返回值为弧度。acos(0) 返回 M_PI / 2
double atan(double x)计算反正切,返回值为弧度。atan(1) 返回 M_PI / 4
double atan2(double y, double x)计算 y/x 的反正切,结果范围为 [-π, π]atan2(1, 1) 返回 M_PI / 4

4. 取整与舍入

函数名描述示例
double ceil(double x)向上取整,返回大于或等于 x 的最小整数值(以浮点数形式)。ceil(2.3) 返回 3.0
double floor(double x)向下取整,返回小于或等于 x 的最大整数值(以浮点数形式)。floor(2.7) 返回 2.0
double round(double x)四舍五入,返回最接近的整数值(以浮点数形式)。round(2.5) 返回 3.0
double trunc(double x)截断小数部分,返回整数部分(以浮点数形式)。trunc(2.7) 返回 2.0

5. 特殊数学函数

函数名描述示例
double abs(int x)计算整数的绝对值(头文件 <stdlib.h> 提供)。abs(-5) 返回 5
double nan(const char *tagp)生成一个表示 NaN(非数字)的值。nan("")
double INFINITY表示无穷大。可用于检查结果是否为无穷大
int isfinite(double x)判断 x 是否为有限值(既不是 NaN 也不是无限大)。isfinite(1.0) 返回 1

6. 常量

常量名描述示例
M_PI圆周率 π,约等于 3.141592653589793sin(M_PI / 2) 返回 1.0
M_E自然常数 e,约等于 2.718281828459045exp(1) 返回 M_E

使用注意事项

  1. 头文件:在使用这些函数前,必须包含头文件 #include <math.h>
  2. 链接库:编译时需要链接数学库,例如在 GCC 中需要加上 -lm,如:gcc program.c -lm
  3. 返回值类型:大部分函数接受和返回 double 类型,注意类型匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【海思Hi3519DV500】双目网络相机套板硬件规划方案

Hi3519DV500双目网络相机套板是针对该芯片设计的一款 IP 编码板 PCBA&#xff0c;硬件接口支持双目sensor 接入&#xff0c;SDIO3.0 接口、USB2.0、USB3.0、UART 接口以及丰富的 IO 扩展应用&#xff0c;可根据各种使用场景设计相应扩展板&#xff0c;丰富外围接口&#xff0c;…

已阻止加载“http://localhost:8086/xxx.js”的模块,它使用了不允许的 MIME 类型 (“text/plain”)。

记录今天解决的一个小bug 在终端启动8080端口号监听后&#xff0c;打开网址http://localhost:8080&#xff0c;发现不能正确加载页面&#xff0c;打开检查-控制台&#xff0c;出现如下警告&#xff1a;已阻止加载“http://localhost:8086/xxx.js”的模块&#xff0c;它使用了不…

unity3d——基础篇小项目(开始界面)

示例代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class BeginPanel : BasePanel<BeginPanel> {public UIButton btnBegin;public UIButton btnRank;public UIButton btnSetting;public UIButton btnQuit; …

时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测

时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测 目录 时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测&#xff08;完整源…

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书

目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 ‌Lets Encrypt‌是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构&#xff08;CA&#xff09;&#xff0c;旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…

丹摩征文活动|基于丹摩算力Llama3.1实现私有化部署的Chatbot

一、简介 Llama 3.1 模型介绍 Llama 3.1 是一种大型的、开源的语言生成模型&#xff0c;类似于OpenAI的GPT-3&#xff0c;但它是由Meta&#xff08;前Facebook&#xff09;推出的。Llama 3.1具备强大的自然语言处理能力&#xff0c;可以执行各种语言任务&#xff0c;如对话生…

ssm168基于jsp的实验室考勤管理系统网页的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;实验室考勤管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实验室考勤管…

(动画)Qt控件 QLCDNumer

文章目录 LCD Number1. 介绍2. 核心属性3 . 代码实现:倒计时1. 在界⾯上创建⼀个 QLCDNumber , 初始值设为 10.2. 修改 widget.h 代码, 创建⼀个 QTimer 成员, 和⼀个 updateTime 函数3. 修改 widget.cpp, 在构造函数中初始化 QTimer4. 修改 widget.cpp, 实现 updateTime 4. 动…

【线程】Java多线程编程

【线程】Java多线程编程 一、前言一个最简单的多线程编程示例可以使用的工具 二、创建线程的方式三、Thread类中重要的属性和方法3.1 构造方法3.2 常见属性 一、前言 当有多个线程的时候&#xff0c;这些线程的执行顺序是不确定的。这一点&#xff0c;是我们之前提到的操作系统…

Java技术复习提升 11 常用类

第11章 常用类 1 包装类 不同包装类都继承自Object类 Serialiazble接口表示该类表示序列化 Comparable接口用于定义自然顺序 包装类和基本数据的转换 jdk5之前手动装箱拆箱 jdk5之后自动装箱拆箱 自动装箱底层调用的是valueof方法 拆箱仍然是intvalue方法 public class Inte…

P1 练习卷(C++4道题)

1.纷繁世界 内存限制&#xff1a;256MB 时间限制&#xff1a;1s 问题描述 这是一个纷繁复杂的世界。 某一天清晨你起床很迟&#xff0c;没有吃上早饭。于是你骑着自行车去超市&#xff0c;但是你又发现商店的工作人员已经重新贴上了价格标签&#xff0c;零食价格都涨了50%。你…

Selenium的八种定位方式

1. 通过 ID 定位 ID 是最直接和高效的方式来定位元素&#xff0c;因为每个页面中的 ID 应该是唯一的。 from selenium import webdriverdriver webdriver.Chrome(executable_pathpath/to/chromedriver) driver.get(https://example.com)# 通过 ID 定位 element driver.find…

logback动态获取nacos配置

文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog&#xff0c;使用的时候、特别是部署的时候&#xff0c;需要改环境&#…

OpenMM的安装与使用

技术背景 OpenMM是一款基于Python开发的开源分子动力学模拟软件&#xff0c;这几年因为AlphaFold的缘故&#xff0c;使得这个软件的热度有了不少提升。并且可以使用GPU硬件加速&#xff0c;所以性能上也不赖。这里介绍一下该软件的基本安装和使用方法&#xff0c;并附带一个真空…

Linux各种并发服务器优缺点

本文旨在介绍针对“无并发C/S模型”改进的方法总结以及各种改进方法的优缺点&#xff0c;具体函数的实现并不介绍。 1. 无并发C/S模型 创建服务器流程分析&#xff1a; socket()创建服务器的监听套接字bind()将服务器给服务器的监听套接字绑定IP地址和Port端口号listen()设置…

cookie反爬----普通服务器,阿里系

目录 一.常见COOKIE反爬 普通&#xff1a; 1. 简介 2. 加密原理 二.实战案例 1. 服务器响应cookie信息 1. 逆向目标 2. 逆向分析 2. 阿里系cookie逆向 1. 逆向目标 2. 逆向分析 实战&#xff1a; 无限debugger原理 1. Function("debugger").call() 2. …

网络无人值守批量装机-cobbler

网络无人值守批量装机-cobbler 一、cobbler简介 ​ 上一节中的pxe+kickstart已经可以解决网络批量装机的问题了,但是环境配置过于复杂,而且仅针对某一个版本的操作系统进批量安装则无法满足目前复杂环境的部署需求。 ​ 本小节所讲的cobbler则是基于pxe+kickstart技术的二…

推荐一款开源电子书阅读器Koodo Reader

Koodo Reader 是一个开源的电子书阅读器&#xff0c;支持多达15种主流电子书格式&#xff0c; 内置笔记、高亮、翻译功能&#xff0c;助力高效书籍阅读和学习。 官网地址&#xff1a;https://www.koodoreader.com/zh 一、下载软件 下载地址&#xff1a;https://dl.koodoreader.…

FreeRTOS——互斥信号量

一、为什么需要互斥信号量 前面的学习中&#xff1a; 调度锁、临界段不可避免的破坏了实时性&#xff0c;还有二值信号量存在这样的隐患——“优先级翻转” 优先级翻转 简单来说&#xff0c;就是由于信号量被低优先级任务占用&#xff0c;即使遇到高优先级任务&#xff0c;它…

AIGC学习笔记(6)——AI大模型开发工程师

文章目录 AI大模型开发工程师005 OpenAI大模型案例实践1 AI 翻译助手需求分析项目起源市场价格和市场前景基于大模型的翻译软件核心功能设计 2 AI 翻译助手架构设计架构设计代码结构设计 3 AI 翻译助手核心功能文档解析文档操作PDF文档操作表格操作图片操作 Prompt封装 4 AI 翻…