Python的數字類型分為兩類:整型(int)以及浮點型(float)。
對于Python來說,整型可以取無限大。
Python的整型可以取任意精度
例如,可以輸入2**1000次方,仍然會傳回正确結果。
Python的浮點類型按照IEE754标準,對于64位的計算機而言,表示成如下方式
1位:符号位 11位:指數位 52位:尾數位
這樣總共可以表示17位長的精度,如果超過17位,Python就無法處理,比如
0.1**1000次方.
在教學視訊中,如果輸入 x =
0.1,那麼最終列印的值則是0.10000000000000001。原因很簡單,因計算機處理數字的方式是二進制,而0.1的二進制則是0.0001100110011...,這樣轉換過程中就會出現誤差(新版的python可能對結果進行了處理再顯示,是以顯示出來仍為0.1)。比如下面程式對s進行累加,每次累加0.1
由于誤差的積累,最後一位變成了8.
誤差的存在,使得浮點型在進行 ==
判斷的操作時,經常出現違背直覺的結果:
是以,對于浮點型來說,我們不需要去判斷結果是否相等,而是要判斷結果是否小于某個允許的誤內插補點:
abs(a*a - 2.0) < 某個極小的正數
之前已經學習過求X的平方根,不過X被假定為開平方後為整數,是以就可以從0開始進行枚舉。現在,考慮更為一般的形式,X開方後不一定為确定的數,由于在實數範圍内無法進行一一的枚舉,是以要采用其他方法來求解。
基本的解題思路是逐次逼近法,即每一次讓結果逼近正确答案一點,也就是說,采取猜想-》檢查-》改進的過程:
guess = initial guess 疊代100次: 如果 f(guess)接近正确答案:傳回guess 否則:令 guess = better guess 如果無傳回值,則報錯
而要判斷f(guess)是否接近正确答案很簡單,隻需要進行驗證即可:abs(guess**2
-x) < 某個極小的正數
assert語句相當于将調試的斷點插入到程式中,比如,如果輸入的epsilon的值為-1,則會顯示如下錯誤:
File "/Users/ihuangmx/程式/Python/Untitled.py", line 2, in squareRootBi assert epsilon > 0,‘epsilon must be postive,not‘ + str(epsilon) AssertionError: epsilon must be postive,not-1
上面的程式還存在Bug,下一講會進行完善。