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()函数计算了实际的平方根值,以便与我们的结果进行比较。

 

目录
相关文章
|
6月前
迭代法求一元三次方程
迭代法求一元三次方程
72 0
|
5月前
|
机器学习/深度学习 存储 人工智能
每日练习之矩阵乘法——斐波那契公约数
每日练习之矩阵乘法——斐波那契公约数
40 0
|
6月前
|
算法 测试技术 C++
【数学归纳法 组合数学】容斥原理
【数学归纳法 组合数学】容斥原理
迭代法解决递推问题:数列和,sinx,ex的近似值
迭代法解决递推问题:数列和,sinx,ex的近似值
113 0
一个求公约数和公倍数的有趣求法
一个求公约数和公倍数的有趣求法
57 0
雅克比迭代法求解线性方程组
雅克比迭代法求解线性方程组
119 0
|
算法
绝对值不等式(贪心)
复习acwing算法基础课的内容,本篇为讲解基础算法:贪心——绝对值不等式,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
132 0
绝对值不等式(贪心)
牛顿迭代法求开方
牛顿迭代法求开方
205 0
牛顿迭代法求开方
|
算法 C语言 C++
【算法练习】迭代法求平方根
【算法练习】迭代法求平方根
【算法练习】迭代法求平方根