首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

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

  •  
  •   miniyao · 77 天前 · 2440 次点击
    这是一个创建于 77 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    >>> 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
        1
    ynyounuo   77 天前   ♥ 3
    好消息,21 世纪美国新出的产品谷歌可以免费给你这类问题的答案了!
        2
    by73   77 天前
    引子 * 乎:请重修 IEEE 754
        3
    ZRS   77 天前
    浮点数本来就有误差....
        4
    gclove   77 天前   ♥ 1
    好消息,21 世纪美国新出的产品谷歌可以免费给你这类问题的答案了!

    把数字转换成二进制你就知道了,你应该使用二进制计算,而不是 10 进制
        5
    ipwx   77 天前
    月经贴,总是以各种方式见到这个问题。

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

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

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

    [decimal]1/3*3 = 0.9999999999999

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

    PS A:\pscode> [decimal]9.9 * 0.4 - 3.96
    0.00
    PS A:\pscode>
    =================================
        24
    banxi1988   76 天前
    好消息,我专门准备了视频来回答你的问题.

    浮点数解惑与避坑指南(1)浮点数的坑哪些你掉过?
    https://www.bilibili.com/video/av67938835/
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1224 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 17:19 · PVG 01:19 · LAX 09:19 · JFK 12:19
    ♥ Do have faith in what you're doing.