「C/C++」C/C++标准库之#include <cmath>数学库

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

    • #include <cmath>:C++中的数学函数库详解
      • 一、`<cmath>`头文件概述
      • 二、数学函数和常量
      • 三、使用示例
      • 四、注意事项

#include :C++中的数学函数库详解

在C++编程中,数学计算是不可或缺的一部分。为了简化数学运算的实现,C++标准库提供了一个强大的数学函数库——<cmath>。这个头文件包含了多种数学函数的声明和定义,用于执行常见的数学运算,如三角函数、对数、指数等。本文将详细介绍<cmath>头文件的内容、使用方法以及常见的应用实例。

一、<cmath>头文件概述

<cmath>是C++标准库中的一个头文件,它提供了许多数学函数和常量,用于执行各种数学运算。这些函数和常量被封装在std命名空间中,因此在使用时需要加上std::前缀。<cmath>头文件的内容主要来源于C标准库中的<math.h>,但它在C++中进行了扩展和标准化,提供了更加丰富的数学函数和更好的类型安全。

二、数学函数和常量

<cmath>头文件包含了许多数学函数和常量,以下是一些常见的函数和常量:

  1. 三角函数

    • std::sin(double x): 计算x(弧度)的正弦值。
    • std::cos(double x): 计算x(弧度)的余弦值。
    • std::tan(double x): 计算x(弧度)的正切值。
    • std::asin(double x): 计算x的反正弦值,结果介于[-π/2, π/2]。
    • std::acos(double x): 计算x的反余弦值,结果介于[0, π]。
    • std::atan(double x): 计算x的反正切值,结果介于[-π/2, π/2]。
    • std::atan2(double y, double x): 计算y/x的反正切值,结果介于[-π, π],能够处理x=0的情况。
  2. 对数函数

    • std::log(double x): 计算x的自然对数(以e为底)。
    • std::log10(double x): 计算x的常用对数(以10为底)。
  3. 指数函数

    • std::exp(double x): 计算e的x次幂。
    • std::pow(double base, double exponent): 计算base的exponent次幂。
  4. 平方根和绝对值

    • std::sqrt(double x): 计算x的平方根。
    • std::abs(int x): 计算整数x的绝对值。
    • std::fabs(double x): 计算浮点数x的绝对值。
  5. 取整函数

    • std::ceil(double x): 向上取整,返回大于或等于x的最小整数。
    • std::floor(double x): 向下取整,返回小于或等于x的最大整数。
    • std::round(double x): 四舍五入取整,返回最接近x的整数。
  6. 取余函数

    • std::fmod(double x, double y): 计算x除以y的余数,返回值的符号与x相同。
  7. 其他函数

    • std::modf(double x, double* iptr): 拆分x的值,将其整数部分通过指针iptr回传,返回小数部分。
    • std::frexp(double x, int* exp): 将x的值拆分成小数部分和指数部分,返回小数部分,并通过指针exp返回指数值。
    • std::ldexp(double x, int exp): 计算x * (2的exp次幂)的值。
  8. 常量

    • M_PI: π的值(在一些实现中可能不被定义,可以自己定义)。

三、使用示例

以下是一些使用<cmath>中函数的示例代码:

#include <iostream>
#include <cmath>int main() {// 角度转换为弧度并计算正弦值double angle = 45.0;double radians = angle * M_PI / 180.0;double sineValue = std::sin(radians);std::cout << "Sine of " << angle << " degrees is " << sineValue << std::endl;// 计算平方根double number = 9.0;std::cout << "Square root of " << number << " is " << std::sqrt(number) << std::endl;// 计算自然对数double e = 2.718281828459045;std::cout << "Natural logarithm of " << e << " is " << std::log(e) << std::endl;// 计算e的幂double exponent = 1.0;std::cout << "e raised to the power of " << exponent << " is " << std::exp(exponent) << std::endl;// 向上取整double value = 2.3;std::cout << "Ceiling of " << value << " is " << std::ceil(value) << std::endl;// 四舍五入取整value = 2.5;std::cout << "Rounding of " << value << " is " << std::round(value) << std::endl;return 0;
}

四、注意事项

  1. 在使用<cmath>中的函数时,需要确保包含该头文件:#include <cmath>
  2. 所有函数和常量都被封装在std命名空间中,因此在使用时需要加上std::前缀。
  3. 函数的参数必须是数字类型(整数、浮点数或双精度浮点数等),否则会发生编译错误。
  4. 一些函数(如std::sqrt)要求参数为非负数,传入负数可能会导致未定义行为或返回特殊值(如NaN或无穷大)。
  5. 在某些实现中,常量M_PI可能不被定义,因此在使用前最好进行检查或自行定义。

综上所述,<cmath>头文件为C++程序提供了丰富的数学函数和常量,使得数学运算的实现变得更加简单和高效。在实际开发中,合理利用这些函数可以大大提高编程效率和代码质量。


在这里插入图片描述

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

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

相关文章

认识线程 — JavaEE

目录 认识线程&#xff08;Thread&#xff09; 1 线程是什么? 2 为什么要有线程 3 进程和线程的区别 区别一 区别二 区别三 区别四 4. Java的线程和操作系统线程的关系 认识线程&#xff08;Thread&#xff09; 1 线程是什么? 一个线程就是一个 "执行流"。…

Excel-多表数据查找匹配(VLOOKUP)

&#x1f496;简介 Excel的VLOOKUP函数同样可以用来查找表格中的数据。VLOOKUP&#xff08;垂直查找&#xff09;是一个非常有用的函数&#xff0c;它可以在一个表格或数据表的一列中搜索特定的值&#xff0c;并返回与之在同一行上的另一列中的值。 &#x1f4d6;环境 WPS …

R语言机器学习算法实战系列(十二)线性判别分析分类算法 (Linear Discriminant Analysis)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍LDA的原理LDA的步骤教程下载数据加载R包导入数据数据预处理数据描述数据切割构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺…

【大数据学习 | kafka】producer的参数与结构

1. producer的结构 producer&#xff1a;生产者 它由三个部分组成 interceptor&#xff1a;拦截器&#xff0c;能拦截到数据&#xff0c;处理完毕以后发送给下游&#xff0c;它和过滤器不同并不是丢弃数据&#xff0c;而是将数据处理完毕再次发送出去&#xff0c;这个默认是不…

【c++篇】:探索c++中的std::string类--掌握字符串处理的精髓

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 前言一.std::string对象的创建二.std::string对象的访问三.std::str…

读取有空格的string对象(getline)

文章目录 读取有空格的string对象1.使用标准库中的iostream来写2.**使用getline读取一整行** 读取有空格的string对象 1.使用标准库中的iostream来写 #include<iostream> using namespace std; int main() {string s;cin >> s;cout << s << endl;ret…

探索Python安全字符串处理的奥秘:MarkupSafe库揭秘

文章目录 探索Python安全字符串处理的奥秘&#xff1a;MarkupSafe库揭秘第一部分&#xff1a;背景介绍第二部分&#xff1a;MarkupSafe是什么&#xff1f;第三部分&#xff1a;如何安装MarkupSafe&#xff1f;第四部分&#xff1a;MarkupSafe的简单使用方法1. 使用escape函数2.…

Tomcat安装与使用

Tomcat优点 1、开源免费&#xff1a;是一个免费、开源的Web服务器&#xff0c;可以在任何环境下自由使用&#xff0c;无需支付任何费用。 2、轻量级&#xff1a;是一个轻量级的Web服务器&#xff0c;其核心仅有几百K&#xff0c;启动速度非常快。 3、易于安装和配置&#xff1a…

【笔记】LLM位置编码之标准位置编码

标准位置编码 起源原理证明&#xff1a;对于任何固定的偏移量 k k k&#xff0c; P E p o s k PE_{posk} PEposk​可以表示为 P E p o s PE_{pos} PEpos​的线性函数。计算 P E p o s k 与 P E p o s PE_{posk} 与PE_{pos} PEposk​与PEpos​的内积结论 通俗理解缺点 起源 由…

深度学习之降维和聚类

1 降维和聚类 1.1 图解为什么会产生维数灾难 ​ 假如数据集包含10张照片&#xff0c;照片中包含三角形和圆两种形状。现在来设计一个分类器进行训练&#xff0c;让这个分类器对其他的照片进行正确分类&#xff08;假设三角形和圆的总数是无限大&#xff09;&#xff0c;简单的…

Typora一款极简Markdown文档编辑器和阅读器,实时预览,序列号生成!免费!最新可用!

文章目录 一、Typora下载和安装二、Typora序列号生成 Typora是一款Markdown编辑器和阅读器&#xff0c;风格极简&#xff0c;实时预览&#xff0c;所见即所得&#xff0c;支持MacOS、Windows、Linux操作系统&#xff0c;有图片和文字、代码块、数学公式、图表、目录大纲、文件管…

异常处理与调试:如何编写稳健的代码(8/10)

目录 异常处理与调试&#xff1a;如何编写稳健的代码&#xff08;8/10&#xff09; 介绍 异常概述 常见的异常类型 使用 try...except 处理异常 基本结构 示例&#xff1a;读取文件内容 捕获多个异常 自定义异常 示例&#xff1a;自定义异常类 调试代码 使用 print…

AI跟踪报道第62期-本周AI新闻: 微软推出Copilot的AI Agent和Computer Control

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

重写(外壳不变)

重写&#xff1a;是子类对父类非静态、非private修饰、非final修饰、非构造方法等的实现过程进行重新编写返回值和形参都不能改变。 重写的好处&#xff1a;子类可以根据需要&#xff0c;定义专属于自己的行为。&#xff08;子类能够根据需要实现父类的方法&#xff09; 方法…

封装echarts组件,即插即用(附源码)

前言&#xff1a;最近一个项目刚收工&#xff0c;分享一个常用的封装echarts的组件。 一、直接上组件代码 <template><el-card class"echart-card" shadow"hover"><template v-slot:header><div class"card-header">&…

JS面试八股文(三)

&#x1f60a;文章目录 21.说一下事件循环22.ajax是什么&#xff1f;怎么实现&#xff1f;23.get和post有什么区别&#xff1f;24.Promise的内部原理是什么&#xff1f;它的缺点是什么&#xff1f;25.Promise和async await的区别是什么&#xff1f;26.浏览器的存储方式有哪些&a…

python实战(二)——房屋价格回归建模

一、任务背景 本章将使用一个经典的Kaggle数据集——House Prices - Advanced Regression Techniques进行回归建模的讲解。这是一个房价数据集&#xff0c;与我们熟知的波士顿房价数据集类似&#xff0c;但是特征数量要更多&#xff0c;数据也要更为复杂一些。下面&#xff0c;…

Linux 命令行查看当前目录的总大小/总磁盘空间/磁盘清理

一、du 查看目录空间大小 &#xff08;一&#xff09; du 命令解析 在Linux命令行可以使用 du 命令来查看当前目录的总大小。du 是 disk usage 的缩写&#xff0c;表示磁盘使用情况。 命令解释&#xff1a;总结每个文件的磁盘使用情况&#xff0c;递归地用于目录。 使用格式…

以通俗易懂的仓库来讲解JVM内存模型

JVM内存模型可以想象成一个大型的仓库&#xff0c;这个仓库被分成了几个不同的区域&#xff0c;每个区域都有特定的用途和规则。下面我们用一个仓库的比喻来介绍JVM内存模型&#xff1a; 仓库大门&#xff08;JVM启动&#xff09;&#xff1a; 当JVM启动时&#xff0c;就像打开…

自动化抖音点赞取消脚本批量处理

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…