c语言根号11取值两位小数,用C语言将一个数开根号后再取倒数的方法
在上學的時候,曾經看過有人寫過這樣的算法,就是將一個數開根號后再取倒數的算法,我本人也覺得十分巧妙,于是就將它積累了下來,讓我們來看看是怎么回事:
#include
#include
float mysqrt(float x)
{
float xhalf = 0.5f * x;
int i = *(int *)&x;
i = 0x5f3759df - (i>>1);
x = *(float *)&i;
x = x * (1.5f - xhalf * x * x);
return x;
}
int main(void)
{
float x = 2.5 ;
float ret = mysqrt(x);
printf("%f\n",ret);
return 0 ;
}
它的作用是將一個數開平方并取倒,經測試這段代碼比(float)(1.0/sqrt(x))快4倍
算法的原理其實不復雜,就是牛頓迭代法,用x-f(x)/f'(x)來不斷的逼近f(x)=a的根。
簡單來說比如求平方根,f(x)=x^2=a ,f'(x)= 2*x,f(x)/f'(x)=x/2,把f(x)代入x-f(x)/f'(x)后有(x+a/x)/2,現在我們選a=5,選一個猜測值比如2,那么我們可以這么算
5/2 = 2.5;
(2.5+2)/2 = 2.25;
5/2.25 = xxx;
(2.25+xxx)/2 = xxxx
...
運行結果:
本文同步分享在 博客“Engineer-Bruce_Yang”(CSDN)。
如有侵權,請聯系 support@oschina.cn 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
總結
以上是生活随笔為你收集整理的c语言根号11取值两位小数,用C语言将一个数开根号后再取倒数的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html (align 、placeho
- 下一篇: URL结构分析