摘要:随便逛了一下知乎和思否的博文,大都没回答到点上。当比较和时,实际比较的是转成进制,看上去是结果很明显啦参考资料
随便逛了一下知乎和思否的博文,大都没回答到点上。
I.浮点数的二进制存储采用 IEEE 754 规范来存储浮点数:
1位【正负符号】+11位【指数】+52位【有效数字】,如下图
由于0.1.toString(2)=0.0001100110011001100110011001100110011001100110011001101
所以
0.1 = 2^-4 * [1].1001100110011001100110011001100110011001100110011010
0.2 = 2^-3 * [1].1001100110011001100110011001100110011001100110011010
铁律是52位有效数字,也就是:
0.1 = 2^-3 * 0.1100110011001100110011001100110011001100110011001101(0) 0.2 = 2^-3 * 1.1001100110011001100110011001100110011001100110011010 sum = 2^-2 * 1.0011001100110011001100110011001100110011001100110011(1)
由于有效数字变成了53位,根据IEEE754 rounding mode 的 Round to Nearest,若x在a和b之间,选择最低有效位为零的值。
a = 2^-2 * 1.0011001100110011001100110011001100110011001100110011 x = 2^-2 * 1.0011001100110011001100110011001100110011001100110011(1) b = 2^-2 * 1.0011001100110011001100110011001100110011001100110100
当比较0.1+0.2 和 0.3时,实际比较的是
0.1 + 0.2 => 0:01111111101:0011001100110011001100110011001100110011001100110[100] 0.3 => 0:01111111101:0011001100110011001100110011001100110011001100110[011]
转成10进制,看上去是:
0.1 + 0.2 => 0.300000000000000044408920985006... 0.3 => 0.299999999999999988897769753748...
结果很明显啦
参考资料:
https://stackoverflow.com/que...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/102151.html
摘要:吐槽一句,大二的专业课数字逻辑电路终于用在工作上了。,整数位为,且精度只到十分位,因此是。如果是不限精度的话,转换后的二进制数应该是无限循环。再看一下百科给出的标准因此,的类型,最高的位是符号位,接着的位是指数,剩下的位为有效数字。 showImg(https://segmentfault.com/img/remote/1460000011902479?w=600&h=600); 用一...
摘要:写在前面可能你会不相信,我是从玩中过来的,我觉得有必要记录一下,这个坑还非踩不可为了说的清楚一点儿,我多铺垫一点儿,先说说数组维度的理解引子老铁们猜一猜长啥样我猜你还没到点我到底想说啥,还是一头雾水,对吧哈哈别揍我,关子卖的挺大,我到底想说 写在前面 可能你会不相信,我是从玩pytorch中过来的,我觉得有必要记录一下,transpose这个坑还非踩不可,为了说的清楚一点儿,我多铺垫一...
阅读 3084·2021-11-22 13:54
阅读 840·2021-11-04 16:08
阅读 4526·2021-10-11 11:09
阅读 3604·2021-09-22 16:05
阅读 931·2019-08-30 15:54
阅读 395·2019-08-30 15:44
阅读 601·2019-08-30 14:05
阅读 1021·2019-08-30 12:46