C ++平方根/巴比伦方法?

时间:2017-05-05 01:43:22

标签: c++ math

我发现这个方法来计算YouTube视频中的平方根,但我无法理解它背后的数学概念,代码完美无缺,任何人都可以向我解释这段代码中会发生什么?

#include <iostream>
using namespace std;

int main(){

float estimation = 1, num;

cout << " input :";
cin >> num;

for (int i = 0; i < 20; i++){
    estimation = (estimation + (num / estimation)) / 2;
}

cout << estimation << '\n';

return 0;
}

link:https://www.youtube.com/watch?v=qBaj1kQJYeU

2 个答案:

答案 0 :(得分:2)

这是

f(x)=x²-a的牛顿方法
N(x) = x - f(x)/f'(x) = x - (x²-a)/(2x) = (x+a/x)/2

计算数量

也很有帮助
( N(x) - sqrt(a) ) / (N(x) + sqrt(a) )
= ( x - sqrt(a) )² / ( x + sqrt(a) )²

表示每个步骤中的错误大约是前一个错误的平方,或者也表示,每个步骤中有效数字的数量或多或少都会加倍。

答案 1 :(得分:0)

它只是巴比伦估算平方根的方法:

https://www.deltacollege.edu/dept/basicmath/Babylonian.htm

  

巴比伦广场根

     

第1步:猜猜。

     

第2步:将您的原始数字除以猜测。

     

第3步:找出这些数字的平均值。

     

第4步:将此平均值用作下一个猜测。

在上面的代码中:

步骤1(估计平方根的数量)作为用户的输入,并存储在num中。在这种情况下,estimation1

cin >> num;

第2步和第3步:

estimation = (estimation + (num / estimation)) / 2;

第4步:

for (int i = 0; i < 20; i++){
    // ...
}

在这种情况下,该过程重复20次。

此外,不是始终将estimation作为1,而是将其设置为num/2进行更接近的估算会更好。