C++中求根号

简介: C++中求根号

一、引言


在计算机编程中,求一个数的平方根(根号)是一个常见的数学运算。C++作为一种通用的、面向对象的编程语言,提供了多种方法来实现这一功能。本文将详细介绍在C++中求平方根的几种方法,并附上相应的代码示例。


二、C++标准库函数求根号


C++标准库中的头文件包含了许多数学函数,其中就包括求平方根的函数sqrt()。使用这个函数可以非常方便地求出一个数的平方根。


示例代码:

  #include <iostream> 
  #include <cmath> // 引入cmath头文件以使用sqrt函数 
  
  int main() { 
  double number = 9.0; 
  double squareRoot = std::sqrt(number); // 使用sqrt函数求平方根 
  std::cout << "The square root of " << number << " is " << squareRoot << std::endl; 
  return 0; 
  }


在上面的代码中,我们首先包含了头文件,然后在main()函数中定义了一个double类型的变量number,并赋值为9.0。接着,我们使用std::sqrt()函数求出了number的平方根,并将结果存储在squareRoot变量中。最后,我们输出了结果。


三、牛顿迭代法求根号


除了使用标准库函数外,我们还可以通过编写自己的算法来求平方根。牛顿迭代法是一种常用的数值计算方法,可以用来逼近函数的根。对于求平方根的问题,我们可以构造一个迭代公式来逼近平方根的值。


牛顿迭代法的公式为:

x_{n+1} = \frac{1}{2} * (x_n + \frac{N}{x_n})

其中,x_n是第n次迭代的值,N是我们要开方的数。迭代初值可以随意选取,但不同的初值可能会影响迭代的收敛速度和精度。


示例代码:

#include <iostream> 
#include <cmath> // 用于比较结果精度 

double sqrtByNewton(double number, double epsilon = 1e-6, int maxIterations = 100) { 
if (number < 0) { 
throw std::invalid_argument("Cannot calculate square root of a negative number"); 
} 
if (number == 0) { 
return 0; 
} 
double x = number; // 初始值设为number本身 
for (int i = 0; i < maxIterations; ++i) { 
double x_next = 0.5 * (x + number / x); 
if (std::abs(x_next - x) < epsilon) { // 如果相邻两次迭代结果之差小于epsilon,则认为已经收敛 
return x_next; 
} 
x = x_next; 
} 
throw std::runtime_error("Newton's method did not converge"); 
} 

int main() { 
double number = 9.0; 
double mySqrt = sqrtByNewton(number); 
std::cout << "The square root of " << number << " is approximately " << mySqrt << std::endl; 
std::cout << "The actual square root is " << std::sqrt(number) << std::endl; 
return 0; 
}


在这个示例中,我们定义了一个sqrtByNewton()函数来实现牛顿迭代法求平方根。函数接受三个参数:要开方的数number、精度要求epsilon(默认为1e-6)和最大迭代次数maxIterations(默认为100)。函数首先检查输入的数是否为负数,如果是则抛出异常。然后,我们使用一个循环来进行迭代计算,直到相邻两次迭代结果之差小于epsilon或者达到最大迭代次数为止。最后,函数返回逼近的平方根值。


main()函数中,我们调用sqrtByNewton()函数来计算9的平方根,并输出计算结果。同时,我们还使用std::sqrt()函数计算了实际的平方根值,以便与我们的结果进行比较。

 

目录
相关文章
|
7月前
迭代法求一元三次方程
迭代法求一元三次方程
92 0
迭代法解决递推问题:数列和,sinx,ex的近似值
迭代法解决递推问题:数列和,sinx,ex的近似值
127 0
差分方程模型:兔子繁殖问题(斐波拉契数列)
差分方程模型:兔子繁殖问题(斐波拉契数列)
159 0
|
Python
递推方程
递推方程是一种数学方程,其中未知量的值被表示为先前已知量值的函数。递推方程通常具有递归的形式,即一个或多个变量被递归地定义为同一变量的函数。递推方程的一个关键特征是,解决方案通常可以通过迭代计算得到,而不是直接求解。递推方程广泛应用于数学、物理、计算机科学等领域。
119 0
数学问题之(矩阵加速递推快速幂)
数学问题之(矩阵加速递推快速幂)
AcWing 658. 一元二次方程公式
AcWing 658. 一元二次方程公式
93 0
AcWing 658. 一元二次方程公式
每日一题1021:迭代法求平方根
题目描述: 用迭代法求 平方根 公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数
171 0
牛顿迭代法求开方
牛顿迭代法求开方
210 0
牛顿迭代法求开方
|
机器学习/深度学习
【组合数学】递推方程 ( 递推方程示例 1 | 列出递推方程 )
【组合数学】递推方程 ( 递推方程示例 1 | 列出递推方程 )
141 0
|
机器学习/深度学习
【组合数学】递推方程 ( 常系数线性非齐次递推方程求解 | 递推方程标准型及通解 | 递推方程通解证明 )
【组合数学】递推方程 ( 常系数线性非齐次递推方程求解 | 递推方程标准型及通解 | 递推方程通解证明 )
206 0