zoukankan      html  css  js  c++  java
  • 浮点数运算误差问题

    在类型转换的总结中,我们说过不能让浮点数进行等级运算,这样会出现误差。比如1.0-0.8,答案不是0.2,而是0.199999999999999996,为什么?这是java遵守IEEE754浮点运算规范的结果。

    例如我们0.5会使用1/2表示,0.75会使用1/2+1/4表示,0.1会使用1/16+1/32+1/25+1/512+1/4096+1/8192+....无限循环下去,无法进行准确表示,所以会造成精度上的误差。

    double a=0.1;
    double b=0.1;
    double c=0.1;
    if((a+b+c)==0.3){
         System.out.println("等于0.3");
    }else{
          System.out.println("不等于0.3");
    }

    由于浮点数误差的关系,显示结果不等于3.0,我们要小心使用浮点数,那么我们如何进行浮点数之间的运算哪?

    可以使用java.math.BigDecimal类

    package cn.yqg.day1;
    
    import java.math.BigDecimal;
    
    public class A {
      public static void main(String[] args) {
        BigDecimal a=new BigDecimal("1.0");
        BigDecimal b=new BigDecimal("0.8");
        BigDecimal c=a.subtract(b);
        System.out.println(c);
    }
    }

    结果为0.2;注意参数带“”,我们可以使用Bigdecimal进行浮点数的加减乘除等运算。

    ---------------------------------------------------------------------------------------------------------

    补充:如果我们使用浮点数和int进行运算,结果是浮点数。

  • 相关阅读:
    [SHOI2014]信号增幅仪
    [SDOI2016]征途
    Luogu P3226 [HNOI2012]集合选数
    Comet OJ C1076 [Contest #4]求和
    Luogu P2657 [SCOI2009]windy数
    Luogu P1864 [NOI2009]二叉查找树
    UVA10559 Blocks
    Luogu P1880 [NOI1995]石子合并
    简单DP
    CF1097F Alex and a TV Show
  • 原文地址:https://www.cnblogs.com/zzuli/p/9319020.html
Copyright © 2011-2022 走看看