为什么0.1+0.2不等于0.3

⭐️原理

整数计算
正数十进制转二进制
三十二位 第一位为符号位0正1负,剩余三十一位表示二进制数据
负数用补码表示(为何?)
反码和补码的概念
反码就是取反后得到的二进制数据,补码就是反码+1得到的二进制数据
例-1用二进制由32个1表示
浮点数计算
小数采用乘2取整法,直到没有小数位,但存在一些数值无限循环,无法取整
二进制转十进制,小数点后面的指数幂是负数
用浮点数存储小数,采用IEEE制定的国际标准
符号位+指数位+尾数
符号位表示正负,指数位指定小数点在数据中的位置,指数位长度长,表达数据范围大
尾数是小数点右侧的数字,尾数的长度决定了数据的精度
十进制浮点数先转为二进制小数,再把小数点移动到第一位有效数字后面(类似科学计算法,小数点的移动方向跟数据移动方向是相反的)
浮点数的指数位跟这里移动的位置是相对应的,数据右移表示+3,左移表示-3,对于单精度数据,需要加上偏移量127
然后小数点右侧的数字就是float里的尾数位,指数位是有符号整数,为了把指数转换为无符号整数,加上127偏移量
小数点左侧的那一位永远都是1,所以不用存储,但是二进制浮点数转化为十进制时,需要考虑到
(-1)^符号位 * (1+尾数位) * 2 ^(指数-127)
0.1+0.2
binaryconvert工具 转换二进制浮点数与十进制浮点数
0 01111011 10011001100110011001101
0 01111100 10011001100110011001101
0 123
0 124
12^(-1)+02(-2)+…
1.00000001490116119384765625 + 2.0000000298023223876953125

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值