欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > C++笔记,数学函数

C++笔记,数学函数

2025/4/16 18:31:11 来源:https://blog.csdn.net/weixin_47059239/article/details/147221560  浏览:    关键词: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;
}

热搜词