簡體   English   中英

這個計算平方根的算法是如何工作的?

[英]How does this algorithm to calculate square root work?

我找到了一段數學代碼來計算實數值的平方根。 我顯然理解代碼本身,但我必須說我非常理解該算法的數學邏輯。 它是如何工作的?

inline
double _recurse(const double &_, const double &_x, const double &_y)
 
        { double _result;
 
          if(std::fabs(_y - _x) > 0.001)
            _result = _recurse(_, _y, 0.5 * (_y + _ / _y));
          else
            _result = _y;
 
          return _result;
        }

inline 
double sqrt(const double &_) 

       { return _recurse(_, 1.0, 0.5 * (1.0 + _)); }

假設您要計算√a並找到一個近似值x 您想通過向x添加一些校正δ來改進該近似值。 換句話說,你想建立

x + δ = √a

或者

(x + δ)² = x² + 2xδ + δ² = a

如果忽略小項δ² ,則可以求解δ並得到

δ ~ (a - x²)/(2x)

最后

x + δ ~ (a + x²)/(2x) = (a/x + x)/2.

這個過程可以迭代並很快收斂到√a


例如對於a=2和初始值x=1 ,我們得到近似值

1, 3/2, 17/12, 577/408, 665857/470832, ...

和相應的方塊,

1, 2.25, 2.00694444..., 2.0000060073049..., 2.0000000000045...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM