Max*_*Max 2 python floating-accuracy
我正在玩一个简单的递归公式并注意到代码
p = 2.0
while p < 3.0:
print p
p = (6+p)**(0.5)
Run Code Online (Sandbox Code Playgroud)
将打印
*snip*
...
2.99999999952
2.99999999992
2.99999999999
3.0
3.0
3.0
3.0
3.0
3.0
Run Code Online (Sandbox Code Playgroud)
当然在2.99999999999和3.0(以及之前)之间会有某种近似,但这里实际发生了什么?对我来说,似乎奇怪的是,浮点3.0将被解释为不是3.0的东西,但仍然足够接近被称为3.0,连续几次.
我做错了什么,代码方面,这里还是我的解释是正确的?我若是,为什么会这样呢?
如果您更改print语句,如下所示:
print '%.20f' % p
Run Code Online (Sandbox Code Playgroud)
一切都会变得清晰:
2.00000000000000000000
2.82842712474619029095
2.97126692250060076006
2.99520732546189538681
2.99920111454065274614
2.99986684946859805123
2.99997780816268644344
2.99999630135816763854
2.99999938355963147174
2.99999989725993687628
2.99999998287665592400
2.99999999714610909862
2.99999999952435159045
2.99999999992072519106
2.99999999998678745783
2.99999999999779776161
2.99999999999963273822
2.99999999999993871569
2.99999999999998978595
2.99999999999999822364
2.99999999999999955591
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |