第五课 浮点数和二分法(逐次近似)
2016-10-11
计算机被认为擅长处理数字
integer
arbitrary precison Python支持任意精度的整数
Long
Long数的运算结果也是Long
Float -- floating point -- real 浮点数
符合IEEE 754 floating point标准
Scientific notation科学计数法的变体
Mantissa exponent 尾数和指数
二进制系统
significant 重要数 mantissa也被称为significant
1 <= matissa <= 2 mantissa
-1022: 1023 exponent
计算机是64 Bit
1 Bit sign 一位存放符号
11 exp 11位存放指数
52 mantissa 52位存放尾数
大约17位的10进制数字精度 17 decimal digits
超过这个精度的大部分语言都做不到
1/8 = 0.125
Base 10 : 1.25 * 10 ^ -1
Base 2 : 1.0 * 2 ^ -3
1/10 = 0.1 = 1 * 10 ^ -1
Base 2 ? 无限长数字 这就是Python显示0.1会变成0.10000...01
Python 内部调用 repr()显示数字将数字显示成string,对于float会round to 17 digits
误差累计
Worry about == on floats 对于浮点数不要做相等判断
abs(a*a -2.0)< epsilon 通过这种方法进行浮点数相等的比较
找平方根的方法
Might not be an exact answer
Can't enumerate all guesses 因为实数是uncountable
Guess,check,improve
successive approximation 逐次逼近法
guess = initial guess
for iter in range(100)
if f(guess) close enough : return guess
else guess = better guess
ERROR
Bisection method 二分法
解的范围是线性空间
每次逼近,epsilon大于0
程序示例
改进方法会在下次讨论
飞鸿雪泥按:二分法应该在均匀分布的线性解空间里表现得比较好
Last updated
Was this helpful?