为什么浮点数据表示有误差?

首先先说下计算机内存里的存储:

内存中最小的单位 位/比特(bit)  二进制数序列中的一个0或一个1就是一个比特,在电脑中,一个比特对应着一个晶体管。

二进制即常说的0和1两个数码来表示的数 基数为2,进位规则是  “逢二进一”

十进制数则用0、1、2、3.........9 , 这十个数来表示。十进制(计du数法)是以10为基础数字系统,进位规则是 “满十进一”

Java中基本数据类型:四类八种:

             

double float属于浮点数据类型 然而在实际的开发中会发现有误差

public class TestDemo {
    public static void main(String args[]){
        double a=2.9;
        float f=2.4f;
        System.out.print("计算结果:");
        System.out.println(a-f);
    
    } 
}

计算的结果怎么和预想的不一样啊 (嗯。。。脑壳疼)

从计算机的存储原理解释浮点数为何会产生误差:

 都知道计算机内部是以二进制进行存储的,因此十进制的有限位的小数在进来之后,会在计算机内部会显示是一个无限位的小数。

Ps:十进制2.9转换为二进制10.1110011001100..................1100无限循环

      : 

   Ps:计算机保存浮点数的精度有限,例如float可以保留十进制最多7位(二进制23位)有效数字,

      double可以保留十进制15-16位(二进制52位)有效数字。那有效数字以后的位就被忽略了。

所以现在清楚浮点数据存储是如何产生误差的了吧。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值