二进制无法精确表示1/10

本文深入探讨了Java中浮点数表示的原理,解释了为何简单的数学运算如2减去1.1会产生看似不精确的结果。通过实例分析,揭示了数位表示法对计算精度的影响,并提供了相关背景知识。

最近翻了下JAVA的基础书,发现一个原来忽略的知识点,现在记录一下:

System.out.println(2-1.1)会是多少?

0.9?

是0.8999999999999999

然而为什么呢?以下是搜索到的比较满意的回答,顺便备注下:

其实跟数位表示法有关,比如十进制的情况下:

123,相当于1*10^2+2*10^1+3*10^0(值*进制^位置,个位0,十位1,百位2)

同理:1/10由二进制表示小数的时候只能够表示能够用1/(2^n)

例如:

0.5能够表示,因为它可以表示成为1/2

0.75也能够表示,因为它可以表示成为1/2+1/(2^2)

0.875也能够表示,因为它可以表示成为1/2+1/(2^2)+1/(2^3)

但是0.1不能够精确表示,因为它补能够表示成为1/(2^n)的和的形式


转载于:https://my.oschina.net/u/2500345/blog/526579

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值