C++笔记,数学函数

参考链接:C++中数学函数的使用方法_cpp里指数函数-CSDN博客

头文件 <cmath> 

1. 基本的算数运算函数

1.1 sqrt() - 计算平方根

  • 功能:计算一个非负实数的平方根。
  • 原型double sqrt(double x);
  • 示例代码
#include <iostream>
#include <cmath>int main() {double num = 25.0;double result = std::sqrt(num);std::cout << "The square root of " << num << " is " << result << std::endl;return 0;
}

1.2 pow() - 计算幂次方

  • 功能:计算 x 的 y 次幂。
  • 原型double pow(double x, double y);
  • 示例代码
#include <iostream>
#include <cmath>int main() {double base = 2.0;double exponent = 3.0;double result = std::pow(base, exponent);std::cout << base << " raised to the power of " << exponent << " is " << result << std::endl;return 0;
}

2. 三角函数

要注意角度的单位是弧度。

若需要将角度从度转换为弧度,可以使用公式 radians = degrees * (M_PI / 180)

(在某些编译器中,M_PI 可能未定义,可以手动定义 #define M_PI 3.14159265358979323846)。

2.1 sin()cos()tan() - 计算正弦、余弦和正切值

  • 功能:分别计算给定角度(以弧度为单位)的正弦、余弦和正切值。
  • 原型
    • double sin(double x);        对/斜
    • double cos(double x);        邻/斜
    • double tan(double x);        对/邻
  • 示例代码
#include <iostream>
#include <cmath>int main() {double angleInRadians = 1.0; // 1 弧度double sinValue = std::sin(angleInRadians);double cosValue = std::cos(angleInRadians);double tanValue = std::tan(angleInRadians);std::cout << "sin(" << angleInRadians << ") = " << sinValue << std::endl;std::cout << "cos(" << angleInRadians << ") = " << cosValue << std::endl;std::cout << "tan(" << angleInRadians << ") = " << tanValue << std::endl;return 0;
}

2.2 asin()acos()atan() - 计算反正弦、反余弦和反正切值

  • 功能:分别计算给定值的反正弦、反余弦和反正切值,返回值为弧度。
  • 原型
    • double asin(double x);
    • double acos(double x);
    • double atan(double x);
  • 示例代码
#include <iostream>
#include <cmath>int main() {double value = 0.5;double asinValue = std::asin(value);double acosValue = std::acos(value);double atanValue = std::atan(value);std::cout << "arcsin(" << value << ") = " << asinValue << " radians" << std::endl;std::cout << "arccos(" << value << ") = " << acosValue << " radians" << std::endl;std::cout << "arctan(" << value << ") = " << atanValue << " radians" << std::endl;return 0;
}

2.3 atan2(y, x) - 计算反正切值 

功能:返回值为弧度,计算点(0,0)和(x,y)的连线与X轴正半轴的夹角,其值域为 [-π,π] (当y=0时,可以取到±π),且在第一二象限为正,在第三四象限为负

与之类似的函数还有atan2f(y, x)、atan2d(y, x),分别对应float类型和int类型。

示例代码:

#include <iostream>
#define M_PI       3.14159265358979323846   // piusing namespace std;int main()
{double x = 100;double y = 1;double abs1, abs2, abs3, abs4;abs1 = atan2(y, x) * 180 / M_PI;cout << "第一象限角abs1= " << abs1 << endl;abs2 = atan2(y, -x) * 180 / M_PI;cout << "第二象限角abs2= " << abs2 << endl;abs3 = atan2(-y, -x) * 180 / M_PI;cout << "第三象限角abs3= " << abs3 << endl;abs4 = atan2(-y, x) * 180 / M_PI;cout << "第四象限角abs4= " << abs4 << endl;return 0;
}

输出结果:

第一象限角abs1= 0.572939
第二象限角abs2= 179.427
第三象限角abs3= -179.427
第四象限角abs4= -0.572939

拓展:atan2与atan的区别

1. atan(x)

atan(x)表示求的是x的反正切,其返回值为[-pi/2,+pi/2]之间的一个数。

2. atan2(y,x)

atan2(y,x)表示求的是y/x的反正切,其返回值为[-pi,pi]之间的一个数。
要注意的是,函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。

3. atan(y/x)与atan2(y,x)的区别

atan2(y, x)是4象限反正切,它的取值不仅取决于正切值y/x,还取决于点 (x, y) 落入哪个象限:

当点(x, y) 落入第一象限时,atan2(y, x)的范围是 0 ~ pi/2;
当点(x, y) 落入第二象限时,atan2(y, x)的范围是 pi/2 ~ pi;
当点(x, y) 落入第三象限时,atan2(y, x)的范围是 -pi~-pi/2;
当点(x, y) 落入第四象限时,atan2(y, x)的范围是 -pi/2~0.

 而 atan(y/x) 仅仅根据正切值为y/x求出对应的角度 (可以看作仅仅是2象限反正切):

当 y/x > 0 时,atan(y/x)取值范围是 0 ~ pi/2;
当 y/x < 0 时,atan(y/x)取值范围是 -pi/2~0.

故 atan2(y, x) = atan(y/x) 仅仅发生在点 (x, y) 落入第一象限 (x>0, y>0)或第四象限(x>0, y<0)。

举个栗子:

  • 栗1:假设y =1.0, x = -1.0,

则 atan(y/x) = atan(-1.0) = -pi/4, 而 atan2(y, x) = 3*pi/4。

  • 栗2:斜率是1的直线的夹角

cout<<atan(1.0)*180/PI;//45°
cout<<atan2(1.0,1.0)*180/PI; //45° 第一象限
cout<<atan2(-1.0,-1.0)*180/PI; //-135°第三象限
后两个斜率都是1 但是atan只能求出一个45°

3. 对数和指数函数

3.1 exp() - 计算自然指数

  • 功能:计算 e 的 x 次幂,其中 e 是自然常数(约为 2.71828)。
  • 原型double exp(double x);
  • 示例代码
#include <iostream>
#include <cmath>int main() {double x = 2.0;double result = std::exp(x);std::cout << "e raised to the power of " << x << " is " << result << std::endl;return 0;
}

3.2 log() 和 log10() - 计算自然对数和以 10 为底的对数

  • 功能log() 计算自然对数(以 e 为底),log10() 计算以 10 为底的对数。
  • 原型
    • double log(double x);
    • double log10(double x);
  • 示例代码
#include <iostream>
#include <cmath>int main() {double num = 100.0;double naturalLog = std::log(num);double commonLog = std::log10(num);std::cout << "Natural logarithm of " << num << " is " << naturalLog << std::endl;std::cout << "Common logarithm of " << num << " is " << commonLog << std::endl;return 0;
}

4. 取整和绝对值函数

4.1 abs()fabs() - 计算绝对值

  • 功能abs() 用于计算整数的绝对值,fabs() 用于计算浮点数的绝对值。
  • 原型
    • int abs(int x);
    • double fabs(double x);
  • 示例代码
#include <iostream>
#include <cmath>int main() {int intNum = -5;double doubleNum = -3.14;int intAbs = std::abs(intNum);double doubleAbs = std::fabs(doubleNum);std::cout << "Absolute value of " << intNum << " is " << intAbs << std::endl;std::cout << "Absolute value of " << doubleNum << " is " << doubleAbs << std::endl;return 0;
}

4.2 ceil() 和 floor() - 向上取整和向下取整

  • 功能ceil() 将一个浮点数向上取整为不小于该数的最小整数,floor() 将一个浮点数向下取整为不大于该数的最大整数。
  • 原型
    • double ceil(double x);
    • double floor(double x);
  • 示例代码
#include <iostream>
#include <cmath>int main() {double num = 3.2;double ceiling = std::ceil(num);double floorValue = std::floor(num);std::cout << "Ceiling of " << num << " is " << ceiling << std::endl;std::cout << "Floor of " << num << " is " << floorValue << std::endl;return 0;
}

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

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

相关文章

不关“猫”如何改变外网IP?3种免重启切换IP方案

每次更换外网IP都要重启路由器&#xff1f;太麻烦了&#xff01;那么&#xff0c;不关猫怎么改变外网IP&#xff1f;无论是为了网络调试、爬虫需求&#xff0c;还是解决IP限制问题&#xff0c;频繁重启设备既耗时又影响效率。其实&#xff0c;更换外网IP并不一定要依赖“重启大…

道路运输安全员企业负责人考试内容与范围

道路运输企业主要负责人&#xff08;安全员&#xff09;考证要求 的详细说明&#xff0c;适用于企业法定代表人、分管安全负责人等需取得的 《道路运输企业主要负责人和安全生产管理人员安全考核合格证明》&#xff08;交通运输部要求&#xff09;。 考试内容与范围 1. 法律法…

深入剖析 WiFi 定位解析功能:原理、技术优势与应用场景

WiFi 定位解析功能的原理​ 信号强度与距离的关系​ WiFi 定位的核心原理基于无线信号传播过程中的一个基本特性&#xff1a;信号强度与信号发射源&#xff08;即 WiFi 接入点&#xff0c;Access Point&#xff0c;简称 AP&#xff09;和接收设备之间距离的关联。一般来说&am…

NVIDIA RTX™ GPU 低成本启动零售 AI 场景开发

零售行业正在探索应用 AI 升级客户体验&#xff0c;同时优化内部流程。面对多重应用场景以及成本优化压力&#xff0c;团队可采用成本相对可控的方案&#xff0c;来应对多重场景的前期项目预演和落地&#xff0c;避免短期内大规模投入造成的资源浪费。 客户体验 AI 场景的研究…

首次打蓝桥杯总结(c/c++B组)

目录 一、对每个题进行总结 1.填空题 2.第一个大题---可分解的正整数&#xff08;10--3&#xff09; 3.第二道大题---产值调整&#xff08;10--3&#xff09; 4.第三道大题---画展部署&#xff08;15--7&#xff09; 5.第四道大题---水质检测&#xff08;15--3&#x…

林纳斯·托瓦兹:Linux系统之父 Git创始人

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 林纳斯托瓦兹&#xff1a;Linux之父、Git创始人 一、传奇人物的诞生 1. 早年生活与家…

C语言多进程素数计算

题目描述&#xff1a; 以下代码实现了一个多进程素数计算程序&#xff0c;通过fork()函数创建子进程来并行计算指定范围内的素数。请仔细阅读代码并回答以下问题。 #include "stdio.h" #include "unistd.h" #include <sys/types.h> #include "…

uniapp-商城-27-vuex 通用方法

1 概述 上节说了vuex 的基本使用方法,分析了基本的使用方法。 在使用中,常见使用,我们要针对状态,购物车,不同类事务的管理,如果按照上节课的通用方法,那么使用和维护是会很大的难度的。 所以这里就必须要进行处理,借助 modules 进行定义不同类事务的处理手段。便于…

半导体设备通信标准—secsgem v0.3.0版本使用说明文档(4)之HSMS(SEMI E37)

文章目录 1、消息快1.1、选择 请求1.2、选择响应1.3、取消选择请求1.4、取消选择响应1.5、Linktest 请求1.6、Linktest 响应1.7、拒绝请求1.8、单独请求1.9、数据消息 2、 协议2.1、 事件 SEMI E37 HSMS 定义主机和设备之间通过 TCP 协议的通信。 它指定用于启动和终止连接的数…

通过GO后端项目实践理解DDD架构

最近在工作过程中重构的项目要求使用DDD架构&#xff0c;在网上查询资料发现教程五花八门&#xff0c;并且大部分内容都是长篇的概念讲解&#xff0c;晦涩难懂&#xff0c;笔者看了一些github上入门的使用DDD的GO项目&#xff0c;并结合自己开发中的经验&#xff0c;谈谈自己对…

Ubuntu系统连网问题

0. Preface 给一台新电脑装上Ubuntu系统后&#xff0c;接好网线&#xff0c;发现上不了网&#xff0c;右上角是有网络连接的图标的&#xff0c;也能获取到ip地址&#xff0c;就是没办法连网&#xff0c;ping www.google.com也没反应。 其实应该是网络设置有点问题&#xff0c;…

C/C++---头文件保护机制

在 C 和 C 编程里&#xff0c;头文件保护机制是一种防止头文件被重复包含的技术&#xff0c;它主要借助 #ifndef、#define 和 #endif 这些预处理指令来达成&#xff0c;也可以使用 #pragma once 这一编译器特定指令。下面详细阐述这一机制&#xff1a; 1. 头文件重复包含的问题…

蓝桥杯 8. 分巧克力

分巧克力 原题目链接 问题描述 儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N 块巧克力&#xff0c;其中第 i 块是 Hᵢ Wᵢ 的长方形。为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。 要求…

从 SQL2API 到 Text2API:开启数据应用开发的新征程

在技术革新浪潮的席卷下&#xff0c;数据应用开发领域正经历着深刻变革。曾经&#xff0c;构建数据 API 需要开发者具备扎实的数据库知识和编程技能&#xff0c;手动编写复杂的 SQL 查询与 API 代码&#xff0c;这一过程不仅耗时费力&#xff0c;还将众多非技术人员阻挡在数据应…

继承:(开始C++的进阶)

我们今天来学习C的进阶&#xff1a; 面向对象三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。 封装我们在前面已经学了&#xff0c;我们细细理解&#xff0c;我们的类的封装&#xff0c;迭代器的封装&#xff08;vector的迭代器可以是他的原生指针&#xff0c;li…

冒泡排序、插入排序、快速排序、堆排序、希尔排序、归并排序

目录 冒泡排序插入排序快速排序(未优化版本)快速排序(优化版本)堆排序希尔排序归并排序各排序时间消耗对比 冒泡排序 冒泡排序核心逻辑就是对数组从第一个位置开始进行遍历&#xff0c;如果发现该元素比下一个元素大&#xff0c;则交换位置&#xff0c;如果不大&#xff0c;就…

JavaScript:表单及正则表达式验证

今天我要介绍的是在JavaScript中关于表单验证内容的知识点介绍&#xff1a; 关于表单验证&#xff0c;我接下来则直接将内容以及效果显示出来并作注解&#xff0c;这样可以清晰看见这个表达验证的妙用&#xff1a; <form id"ff" action"https://www.baidu.…

天元证券|调仓曝光!首批科技基金一季报出炉

4月15日&#xff0c;中欧基金、永赢基金、长城基金等公募基金公司旗下部分权益类基金产品一季报出炉。 券商中国记者梳理发现&#xff0c;永赢信息产业智选混合主要聚焦信息技术领域布局&#xff0c;前十大重仓股中9只股票属于信息技术行业&#xff0c;合计占基金资产净值比例达…

SpringAI版本更新:向量数据库不可用的解决方案!

Spring AI 前两天&#xff08;4.10 日&#xff09;更新了 1.0.0-M7 版本后&#xff0c;原来的 SimpleVectorStore 内存级别的向量数据库就不能用了&#xff0c;Spring AI 将其全部源码删除了。 此时我们就需要一种成本更低的解决方案来解决这个问题&#xff0c;如何解决呢&…

Sklearn入门之datasets的基本用法

、 Sklearn全称:Scipy-toolkit Learn是 一个基于scipy实现的的开源机器学习库。它提供了大量的算法和工具&#xff0c;用于数据挖掘和数据分析&#xff0c;包括分类、回归、聚类等多种任务。本文我将带你了解并入门Sklearn下的datasets在机器学习中的基本用法。 获取方式 pi…