V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
miniyao
V2EX  ›  Python

Python 处理浮点运算,为什么浮点位数会有误差?

  •  
  •   miniyao · 2019-09-22 23:49:01 +08:00 · 5260 次点击
    这是一个创建于 1923 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后面很长的尾巴是怎么来的?

    >>> 9.9 * 0.4
    3.96oooooooooooo4
    >>> 9.9 * 0.6
    5.94
    >>> 9.9 * 0.8
    7.92oooooooooooo1
    
    • oooooooooooo 表示 12 个数字 0,太多 0 帖子发不出来
    24 条回复    2019-09-23 23:57:18 +08:00
    ynyounuo
        1
    ynyounuo  
       2019-09-22 23:52:00 +08:00   ❤️ 3
    好消息,21 世纪美国新出的产品谷歌可以免费给你这类问题的答案了!
    by73
        2
    by73  
       2019-09-22 23:56:55 +08:00
    引子 * 乎:请重修 IEEE 754
    ZRS
        3
    ZRS  
       2019-09-23 00:00:28 +08:00
    浮点数本来就有误差....
    gclove
        4
    gclove  
       2019-09-23 00:01:58 +08:00   ❤️ 1
    好消息,21 世纪美国新出的产品谷歌可以免费给你这类问题的答案了!

    把数字转换成二进制你就知道了,你应该使用二进制计算,而不是 10 进制
    ipwx
        5
    ipwx  
       2019-09-23 00:20:51 +08:00
    月经贴,总是以各种方式见到这个问题。

    IEEE 754
    qiayue
        6
    qiayue  
       2019-09-23 00:27:53 +08:00
    跟具体的语言无关,任何语言都会出现浮点数计算误差
    关键字:浮点数二进制
    Yourshell
        7
    Yourshell  
       2019-09-23 00:32:15 +08:00 via iPhone
    几乎所有 cs 入门教程都有提到这个问题,虽然我忘了🐱
    Raymon111111
        8
    Raymon111111  
       2019-09-23 00:47:22 +08:00
    十进制的有限小数表达成二进制可能是无限小数
    caomu
        9
    caomu  
       2019-09-23 00:50:55 +08:00 via Android
    好消息!好消息!本站成功和谷歌达成合作关系,以后大家有什么想问的问题可以直接谷歌搜索,不需要在发帖问了,可以省下大家很多时间!非常方便!
    eric6356
        10
    eric6356  
       2019-09-23 00:52:27 +08:00 via iPhone   ❤️ 1
    cherbim
        11
    cherbim  
       2019-09-23 05:17:49 +08:00 via iPhone
    所有的语言入门都会提到这个问题,详情 ieee 754 标准
    334862132
        12
    334862132  
       2019-09-23 05:19:10 +08:00
    跟 python 语言美关系,这个涉及到计算机底层原理,所有语言都一个样 python 的话用 decimal 包之后变成 str 试试吧
    Karpov
        13
    Karpov  
       2019-09-23 09:27:39 +08:00
    感谢楼主,重新学习了一下·
    https://juejin.im/entry/575543857db2a2006993114e
    Pythondr
        14
    Pythondr  
       2019-09-23 10:14:46 +08:00
    这种基础的问题为什么不自己去看去学习呢?
    https://juejin.im/post/5d6e74c35188254628237d5d
    mcluyu
        15
    mcluyu  
       2019-09-23 10:17:23 +08:00
    二进制无法精确表示十进制的浮点数
    Vegetable
        16
    Vegetable  
       2019-09-23 10:19:30 +08:00
    题注这样也好,让很多人都学习\复习了一遍这个知识
    ps1aniuge
        17
    ps1aniuge  
       2019-09-23 12:41:22 +08:00
    PS A:\pscode> 9.9 * 0.4
    3.96
    PS A:\pscode>

    powershell 没这问题。或者说默认设置好一些。

    在 powershell 中,有自动的数字类型判断,当然你也可以手动。
    默认 1/3*3 = 1
    也可以手动设定[decimal]1/3*3 = 0.9999999999999
    no1xsyzy
        18
    no1xsyzy  
       2019-09-23 12:52:24 +08:00
    @ps1aniuge
    PS > 9.9*0.4-3.96
    4.44089209850063E-16
    并不是没这问题,只是最终结果精度太低罢了
    mangoDB
        19
    mangoDB  
       2019-09-23 13:00:43 +08:00
    你需要了解一下,在计算机中,是如何通过二进制来表示`浮点数`的。
    gIrl1990
        20
    gIrl1990  
       2019-09-23 13:33:53 +08:00
    我来说一个题外的:
    ECMAScript uses a double-precision 64-bit binary format IEEE 754-2008 value for number
    `Number.MIN_SAFE_INTEGER` `Number.MAX_SAFE_INTEGER`
    u823tg
        21
    u823tg  
       2019-09-23 14:02:55 +08:00 via Android
    你得去看看基础了。这个是很基础的问题。
    littlewing
        22
    littlewing  
       2019-09-23 19:13:01 +08:00
    要你们多学学计算机基础知识,你们不听
    ps1aniuge
        23
    ps1aniuge  
       2019-09-23 23:18:22 +08:00
    在 powershell 中,有自动的数字类型判断,当然你也可以手动。
    =================================

    [decimal]1/3*3 = 0.9999999999999

    =================================

    PS A:\pscode> [decimal]9.9 * 0.4 - 3.96
    0.00
    PS A:\pscode>
    =================================
    banxi1988
        24
    banxi1988  
       2019-09-23 23:57:18 +08:00
    好消息,我专门准备了视频来回答你的问题.

    浮点数解惑与避坑指南(1)浮点数的坑哪些你掉过?
    https://www.bilibili.com/video/av67938835/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2801 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:49 · PVG 14:49 · LAX 22:49 · JFK 01:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.