關於開方的迭代演算法

2021-06-20 15:36:47 字數 529 閱讀 7378

去年某司有一道面試題是不用 開根號計算開方,當時第一反應就是迭代逼近,但是對方還要求能不能把速度加快,先稍作總結。

迭代逼近意思就是 我先隨便取乙個數,如果平方大於給定 n,那麼就取乙個小一點的;如果小了,那就取個大一點,最後達到精度要求即可。

實現**:

class solution

else(x*x

快速演算法就是牛頓迭代法:

f(x)=pow(x,2)-n;找到f(x)=0的x即可。函式梯度為2x,所以y(k+1)-y(k)=g(x(k))(x(k+1)-x(k)),其中g(x(k)) 為在x(k)處的梯度。

推導得到x(k+1)=(x(k)+n/x(k))/2;

class solution{

public: float my_sqrt(float n){

float x=num/2,x1;

float delta=0.0001;//精度

while(!(fabs(x-x1)

因為x的初值選擇會對迭代次數有影響,所以還有一些關於初值選擇的研究。

基於迭代單元的恢復餘數開方器

該開方器的演算法與 手算 以前並不知道開方還有這種手算的方法 演算法相似,使用迭代解決,文字描述如下 將0為餘數的初值a,0作為結果初值b將被開方數前兩位取出,與01比較大小。若前兩位大,則 01為輸出餘數 a m 輸出結果1 b m 否則為輸出餘數 a m 輸出結果0 b m 將被開方數的從高位數...

matlab的開方演算法 常見演算法的MATLAB實現

順序刪去圖中的邊,若不形成迴路則將此邊加入最小生成樹。function find v integer integer var i integer begin i 1 while i n and not v in vset do inc i if i n then find i else find 0...

C 迭代法求開方 牛頓迭代法求根近似值

include include double f double x double f2 double x int main printf lf s2 利用牛頓迭代法求方程的根 有這麼乙個方程2x 3 4x 2 3x 6 0 則令f x 2x 3 4x 2 3x 6 求出f x 6x 2 8x 3 下...