Python FAQ1-浮点数计算的精确度

    本文起源于python-2.7.9-docs中的faq.pdf中的“3.3 Why are floating point calculations so inaccurate?”

    在python解释器中进行下面浮点数运算,结果令人很是吃惊:

    >>> 1.2 - 1.0

    0.19999999999999996

    解释:

        这与后台C代码控制浮点数的方式有关。内部使用固定数位的二进制(小)数来表示十进制的浮点数。有一些浮点数不能被二进制数精确的表示,就像是无限循环或者超出浮点数的表示位数(32或64位),最终在某个点上会被截断来表示该浮点数,因此造成了较小的舍入错误。

    对于此,判断浮点数相关的相等要小心了,有时候明显为真的表达式却不为真:

    比如:

        1.2 - 1.0 == 0.2

        结果为False。

    另外,repr(f)将打印出尽可能多的精确小数位,str(f)将会打印出人可以舒适看到的形式

    >>> repr(1.2 - 1.0)      # 1.2 - 1.0,默认是repr的行为

    '0.19999999999999996'

    >>> str(1.2 - 1.0)       # print 1.2 - 1.0,默认是str的行为

    '0.2'

    eval(repr(f)) == f是恒为真的。

    

    以上是关于这一FAQ的翻译讨论,有些问题还是没搞清楚:

    比如解释器中执行repr,一种是传入计算式,一种是传入浮点值,结果是不一样的,why?

In [55]: repr(1.2-1.0)
Out[55]: '0.19999999999999996'
In [57]: repr(0.2)
Out[57]: '0.2'

    有哪位大神可以给俺回复一下,我感谢了。

    最后附注一个链接,详细的研究精度问题及浮点数进制间转换的代码:

    http://hyry.dip.jp/tech/slice/slice.html/5



 

你可能感兴趣的:(python,FAQ,精度,浮点数)