日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言根号11取值两位小数,用C语言将一个数开根号后再取倒数的方法

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言将一个数开根号后再取倒数的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。