今天看到乙個問題:計算機如何實現開根號?
如何求乙個數字的算術平方根(又叫開根號,或者開方)? 大家普遍都是用計算器直接計算的,對於程式設計師來說,就是呼叫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)
return x1;
}
用計算機設計演算法解決問題時,特別是數學問題,最直觀的思路有兩個。
乙個是利用計算機強大的計算能力,用窮舉、遞迴、迭代等方法,直接求解,或者不斷趨近、收斂於真實解。例如有些密碼的破解,例如線性方程組的求解等等。
另外一種就是利用數學,把問題用數學推導簡化成一條公式,再通過計算機求解這條公式即可。最典型的就是圓周率pi的計算公式:π/4=1-1/3+1/5-1/7+1/9-1/11+……
以上兩種解法,只是解決了開根號的問題而已。我們注重的是求解思路,而不是具體的方法。畢竟生活中的問題不少,而解法又各式不同。但知道了從哪個方向去利用計算機開根號,那開立方、求對數 這些問題也就都容易解了。
生命不息,學習不止,以後如果還遇到其他解法,再來補上。
Java實現開根號
static float sqr float x else if mid mid牛頓迭代法 newton s method 又稱為牛頓 拉夫遜方法 newton raphson method 它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困...
matlab開根號 matlab基本計算
這裡介紹的內容是使用matlab進行基本的數學計算,完成的是類似計算機計算數學算式的功能,這篇文章基本可以幫助你學會所有基本的matlab計算方法。1.基本計算 matlab中的基本的運算符號為 四則運算規則和平時使用的計算器相同,使用matlab進行計算時也需要注意計算的順序,先加減後乘除,需要改...
實現計算機
實現乙個計算器 實現兩個運算元 小數和整數均可 的加 減 乘 除 清零操作。1.加法運算 2.減法運算 3.乘法運算 4.除法運算 64 16 4 using system using system.collections.generic using system.componentmodel us...