計算機如何實現開根號?
今天看到一個問題:計算機如何實現開根號?
如何求一個數字的算術平方根(又叫開根號,或者開方)? 大家普遍都是用計算器直接計算的,對於程式設計師來說,就是呼叫sqrt()方法。但是其內部又是怎麼實現的呢?下面作了下總結。
———-
方法一:迭代法
學過計算方法的應該都還有印象:一個函式 f(x) 在區間 [a,b] 上連續,且 f(x)=0 在 x∈[a,b] 上有解,求x?
最簡單的就是用二分法:分別求f(a)、f(b)、f[(a+b)/2],哪兩個乘積為負數則把那兩個區間當做 [a,b] ,然後一直迴圈,直到 a-b 達到要求的精度為止。
再有一種就是用迭代法:迭代法有很多種,公共的思想是選一個數值,然後不斷迴圈迭代,讓它逐漸逼近真實解。至於怎麼迭代可以讓它趨近真實解,不同問題的求解用的迭代方法不同,我們暫且先忽略。
其實二分法也算是迭代法的一種了。
好了,直接看開根號的迭代法程式碼吧:
double _sqrt(double a)
{
double x1 = a;
double x2 = a/2;
while(fabs(x1-x2) > 0.00000001)
{
x1 = x2;
x2 = (x1+a/x1)/2; ///////迭代的核心程式碼
}
return x1;
}
方法二:數學推導
用計算機設計演算法解決問題時,特別是數學問題,最直觀的思路有兩個。
一個是利用計算機強大的計算能力,用窮舉、遞迴、迭代等方法,直接求解,或者不斷趨近、收斂於真實解。例如有些密碼的破解,例如線性方程組的求解等等。
另外一種就是利用數學,把問題用數學推導簡化成一條公式,再通過計算機求解這條公式即可。最典型的就是圓周率Pi的計算公式:π/4=1-1/3+1/5-1/7+1/9-1/11+……
百度裡面有一個求開方的很好的方法,原址見此。
以上方法可以筆算求解出任意一個正數的算術平方根。可是為什麼要乘以20呢?為什麼a要這樣試驗得到呢?這些數學原理我們不用深究,畢竟我們的目的不是搞數學研究。
我們的重點是,這應該怎樣轉化成程式程式碼呢?我的大約思路是:
1、用要求開方的這個數用字元陣列儲存,然後把它分隔成兩個兩個字元,用atoi函式轉成int型存在一個整型陣列裡邊,然後對這個整型陣列進行操作。這樣就能求任意長的數字的開方了,這是用第一種方法做不到的。
2、看上面的圖,暫且把193.9叫做商,把29、383、3869叫做除數。則:把商的每一位數存在int型陣列裡邊,則各個除數都能用商的各位數表示出來了。
3、邏輯實現:重點有兩個,一個是除法的實現,另外一個是小數的處理。
具體的程式碼就不放出來了。
以上兩種解法,只是解決了開根號的問題而已。我們注重的是求解思路,而不是具體的方法。畢竟生活中的問題不少,而解法又各式不同。但知道了從哪個方向去利用計算機開根號,那開立方、求對數 這些問題也就都容易解了。
生命不息,學習不止,以後如果還遇到其他解法,再來補上。
轉載請註明出處,謝謝!(原文連結:http://blog.csdn.net/bone_ace/article/details/45870975)
相關文章
- excel開根號公式 excel怎麼開根號Excel公式
- excel根號公式怎麼打 excel開根號函式公式Excel公式函式
- 計算機實際上是如何工作的計算機
- 根據兩點經緯度計算距離和角度——java實現Java
- 子網劃分,主機號,網路號計算
- 百度地圖根據經緯度計算瓦片行列號地圖
- 微博根據手機號查詢
- 四位計算機的原理及其實現計算機
- Python 如何根據給定模型計算權值Python模型
- Python如何根據給定模型計算權值Python模型
- 如何用redux實現computed計算屬性Redux
- 根據身高計算體重
- 根據編號展開內容
- Hybris開發環境的license計算實現開發環境
- Go 實現泛型展開以及展開時計算Go泛型
- [小程式開發實戰]使用WxJava實現手機號獲取Java
- 如何使用btsync通過網路實現計算機間的檔案共享計算機
- 厲害了量子計算機!瞧瞧它是如何“秒殺”其他計算機計算機
- “關機幣價”如何計算?
- 如何區分計算機策略計算機
- 實時計算如何幫助淘寶實現線上「實時選品」?
- 根號分治
- 如何實現邊緣計算中的節點自治
- 10 早期計算機如何程式設計計算機程式設計
- 例項演示:Excel實現資料更新獲取,並根據公式計算後展示Excel公式
- 計算機學院的老師實際程式設計能力如何?計算機程式設計
- 計算機系統3-> 現代計算機基石 | 圖靈機理論計算機圖靈
- 根據公曆計算農曆
- 計算機網路實驗計算機網路
- 如何實現溢位文字省略號
- 如何讓計算機理解語意?計算機
- 如何修改Mac的計算機名Mac計算機
- 業界大佬熱議雲端計算如何實現安全落地
- 計算機書籍- 網路爬蟲開發實戰計算機爬蟲
- 雲端計算開發學習教程,雲端計算基礎架構實現講解架構
- oauth 實現手機號碼登入OAuth
- 手機號/郵箱 用*替代實現
- 世界最快超級計算機 探祕天河一號計算機