2017-05-05 79 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))² 

錯誤,或者也如表達的那樣,每一步中有效數字的數量或多或少都會增加一倍。