关于小数计算的精确度问题

计算机中的浮点数无法精确表示所有小数,例如0.1在二进制下无法精确表示,导致计算结果不精确。这是因为计算机使用二进制存储小数,而二进制只能精确表示2的次方之和的数。虽然有些运算结果看似精确,实际上是Java等语言在输出时进行了优化。处理计算不精确的方法包括四舍五入、固定小数位数或使用高精度数据类型如Java的BigDecimal。浮点数在二进制中采用IEEE 754标准,分为32位的float和64位的double,包含符号位、尾数和指数,且规定了特殊值的表示方式。
摘要由CSDN通过智能技术生成

来源:Java编程的逻辑

计算机之所以叫"计算"机就是因为发明它主要是用来计算的,"计算"当然是它的特长,在大家的印象中,计算一定是非常准确的。但实际上,即使在一些非常基本的小数运算中,计算的结果也是不精确的。

比如:

float f = 0.1f*0.1f;
System.out.println(f);

这个结果看上去,不言而喻,应该是0.01,但实际上,屏幕输出却是0.010000001,后面多了个1。

看上去这么简单的运算,计算机怎么会出错了呢?

简要答案

实际上,不是运算本身会出错,而是计算机根本就不能精确的表示很多数,比如0.1这个数。

计算机是用一种二进

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值