2017-05-05 77 views
-2

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

#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; 
} 

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

+3

不要垃圾标签! C不是C++! – Olaf

回答

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以进行更接近的估计。

2

这在

N(x) = x - f(x)/f'(x) = x - (x²-a)/(2x) = (x+a/x)/2 

牛顿法用于f(x)=x²-a这也有利于计算,其显示,在各步骤中的误差约为先前的平方量

(N(x) - sqrt(a))/(N(x) + sqrt(a)) 
= (x - sqrt(a))²/(x + sqrt(a))² 

错误,或者也如表达的那样,每一步中有效数字的数量或多或少都会增加一倍。