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

一个有关误差的问题

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

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