• 请不要在回答技术问题时复制粘贴 AI 生成的内容
scriptish
V2EX  ›  程序员

一个有关误差的问题

  •  
  •   scriptish · Dec 27, 2016 · 2756 views
    This topic created in 3607 days ago, the information mentioned may be changed or developed.
    初学者
    java 环境下
    double pi =3.14;
    int a = 10;
    int b = 2;
    double z = pi*a*b;
    System.out.println(z);

    我预期的结果是 62.8
    但 myeclipse 的结果是: 62.800000000000004

    我的问题是:最后的 4 为什么会出现
    如果我想深入了解这个误差为什么会出现,可以去看哪些教材

    谢谢了
    9 replies  •  2016-12-28 16:15:44 +08:00
    misaka19000
    misaka19000
    Dec 27, 2016 via Android
    1
    IEEE 754
    ivvei
    ivvei
    Dec 27, 2016
    2
    你自己琢磨下怎样用二进制来表示一个浮点数的问题应该就有思路了。
    argos
    argos
    Dec 27, 2016
    3
    深入理解计算机系统
    SoloCompany
    SoloCompany
    Dec 27, 2016
    4
    需要 10 进制浮点运算的请使用 BigDecimal
    owt5008137
    owt5008137
    Dec 28, 2016 via Android
    5
    epsilon
    allenhu
    allenhu
    Dec 28, 2016
    6
    0.999999........... = 1
    weizhiyao008
    weizhiyao008
    Dec 28, 2016
    7
    IEEE 浮点
    或者买本《深入理解计算机系统》,翻了一下目录,大概 67 页开始
    TerrenceSun
    TerrenceSun
    Dec 28, 2016
    8
    准确一点,这个问题是二进制浮点的精度问题。
    大部分的小数,是没办法用二进制进行精确表示的。
    srlp
    srlp
    Dec 28, 2016 via iPhone
    9
    1 楼和 8 楼结合来看,答案很全面了。

    重点在于,初学阶段,你只需要记住 double 是无法准确判定 == 的就好了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   975 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    ♥ Do have faith in what you're doing.