浮点数的精度问题

问题的发现是源于MIT那门Python公开课的一个小练习:

Write a Python function, clip(lo, x, hi) that returns lo if x is less than lohi if x is greater than hi; and x otherwise. For this problem, you can assume that lo < hi.”要求不能使用条件语句,可以使用max()和min()函数。

标准答案是:

def clip(lo, x, hi):
   '''
   Takes in three numbers and returns a value based on the value of x.
   Returns:
    - lo, when x < lo
    - hi, when x > hi
    - x, otherwise
   '''
   return min(max(x, lo), hi)

我的答案是:
def clip(lo, x, hi):
     return sum([lo,x,hi])-max(lo,x,hi)-min(lo,x,hi)

思路上是没有问题的,但是运行结果会出错,比如


后来搞清楚是实数的无限精度跟计算机的有限内存之间的矛盾,在浮点数相减的时候就会出现精度误差。下文是转载的一篇详解:

http://blog.csdn.net/fancylovejava/article/details/12027039

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值