MIT公开课:计算机科学及编程导论 Python 笔记5 浮点数,逐次逼近法和二分法
2015-05-18 17:47
666 查看
Lecture5: Floating point number , successive refinement, finding roots 浮点数和二分法
3wschool 数字Python入门篇之数字
>>> a = 2 ** 1000 >>> a 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L >>> b = 2 ** 999 >>> b 5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688L >>> a/b 2L
IEEE 754 floating point
wiki IEEE floating point
wiki IEEE 754 中文
scientific notation
a mantissa 尾数(0=< mantissa < 2) and an exponent 指数
worry about == on float number!
>>> import math >>> a = math.sqrt(2) >>> a 1.4142135623730951 >>> a * a == 2 False
# 大约相等 abs(a*a - 2.0) < epsilon
>>> s = 0.0 >>> for i in range(10): s += 0.1 ... >>> s 0.9999999999999999
Why might this be a challenge? What are some of the issues?
might not be an exact answer 没有确切的值 例如:sqrt(2)
can’t enumerate all guesses 无法枚举所有的可能值,因为实数是不可数的
guess, check, and improve
successive approximation 逐次逼近法
# 逐次逼近法(伪代码): guess = inital guess for iter in range(100): if f(guess) close enough: return guess else: guess = better guess error
逐次逼近法求平方根
- 二分法,求x的平方根,epsilon (ε) 是一个足够小的数,ctr 迭代次数
def squareRootBi(x, epsilon): """Assume x >= 0 and epsilon > 0 Return y s.t. y*y is within epsilon(ε) of x""" assert epsilon > 0, 'epsilon must be postive, not' + str(epsilon) low = 0 high = max(x, 1) guess = (low + high) / 2.0 ctr = 1 while abs(guess ** 2 - x) > epsilon and ctr <= 100: # print 'low:', low, 'high:', high, 'guess:', guess if guess**2 < x: low = guess else: high = guess guess = (low + high) / 2.0 ctr += 1 assert ctr <= 100, 'Iteration count exceeded' print 'Bi method. Num. iterations:', ctr, 'Estimate:', guess return guess
def squareRootNR(x, epsilon): """Return y s.t. y*y is within epsilon of x""" assert epsilon > 0, 'epsilon must be postive, not' + str(epsilon) x = float(x) guess = x / 2.0 guess = 0.001 diff = guess ** 2 - x ctr = 1 while abs(diff) > epsilon and ctr <= 100: # print 'Error:', diff, 'guess:', guess guess = guess - diff/(2.0*guess) diff = guess ** 2 - x ctr += 1 assert ctr <= 100, 'Iteration count exceeded' print 'NR method. Num. iterations:', ctr, 'Estimate:', guess return guess
相关文章推荐
- MIT麻省理工学院公开课:计算机科学及编程导论 Python 笔记1-3
- MIT公开课:计算机科学及编程导论 Python 笔记4 函数分解抽象与递归
- 计算机科学与Python编程导论_MIT 学习笔记(一)
- 计算机科学与Python编程导论_MIT 学习笔记(二)
- 计算机科学与Python编程导论_MIT 学习笔记(七)
- 计算机科学与Python编程导论_MIT 学习笔记(六)
- 计算机科学与Python编程导论_MIT 学习笔记(三)
- 计算机科学与Python编程导论_MIT 学习笔记(五)
- 计算机科学与Python编程导论_MIT 学习笔记(四)
- MIT6.00.1X 计算机科学和PYTHON编程导论 第五周
- MIT 6.00.01X 计算机科学和Python编程导论 week1
- MIT6.00.1X 计算机科学和PYTHON编程导论 第一周
- MIT 6.00.1x 计算机科学和Python编程导论 Set 3
- MIT 6.00.01X 计算机科学和Python编程导论 bolg参考整理
- MIT6.00.1X 计算机科学和PYTHON编程导论 第三周
- MIT6.00.1X 计算机科学和PYTHON编程导论 第四周
- 麻省理工学院公开课:计算机科学及编程导论 课堂笔记
- MIT计算机科学及编程导论02课学习笔记
- MIT开发课程-计算机科学及编程导论-课程简介及数据类型-笔记
- MIT6.00.1X 计算机科学和PYTHON编程导论 第二周