java中3 0.1_为什么java里面3*0.1=0.30000000000000004,而4*0.1=0.4?-Go语言中文社区

作者:蓝色

链接:https://www.zhihu.com/question/56545018/answer/149620518

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个问题不简单,既跟浮点数的表示有关,也跟Java的设计机制有关。

对于0.1来说,其本质是 1 / 10,那么若你用二进制表示它们,然后除的话,是这样的:1 / 1010,然而这一个是除不尽的,是无穷循环。

equation?tex=%5Csqrt%5B1010%5D%7B1.00000000%7D+ ===> 0.0 00110011001100110011001100110011... 其中0011循环

而根据标准用科学表示法表示的话,就是

equation?tex=1.10011001100+...+ x

equation?tex=2%5E%7B-4%7D+

f8eae744fe93124e06d0a2413ba4dbf3.png

根据这幅图和计算公式

equation?tex=%28-1%29%5E%7Bs%7D+%2A+2%5E%7B%28e+-+1023%29%7D+%2A+m++, 我们得到了exponent 是 -4,所以,我们的 e 取值为 1019 (1019 - 1023 = -4),1019的11位二进制表示为0111 1111 011 然后 m,即multipler,为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值