• 为什么计算机中的小数位无法精确


    https://github.com/wmui/blog/issues/1
    想搞清这个问题,首先要明白十进制和二进制的转换关系
    以数字43.21转换为二进制进行说明

    43/2=21...1
    21/2=10...1
    10/2=5...0
    5/2=2...1
    2/2=1...0
    1/2=0...1
    整数部分:101011
    总结:不断除以基数(2进制的基数是2),倒序取余数,110101

    0.212=0.42 ...0
    0.42
    2=0.84 ...0
    0.842=1.68 ...1
    0.68
    2=1.36 ...1
    0.36*2=0.72 ...0
    ...
    (一直计算到0.72为0.00停止,就会得到精确数,这也是为什么计算机在小数计算上出现误差的原因)
    小数部分:0.00110
    总结: 不断乘以基数,正序取整数部分进位,00110
    结果:(43.21)10 约等于 (101011.0011)2

    二进制转十进制
    整数部分:
    101011=122222+0+1222+0+12+1=43
    小数部分:
    0.0011=0
    (1/2)+0(1/4)+1(1/8)+1*(1/16)=0.1875
    结果:43.1875 (101011.0011)2 约等于 (43.21)10
    总结:整数位从右至左,依次乘以2的0次方,2的一次方。小数位从左至右,以此乘以2的-1次方,2的-2次方
    一图胜千言,最快的二进制转十进制方法

  • 相关阅读:
    循环队列
    快速排序
    单链表
    数学之美总结
    我要的生活...
    北京,我来了
    冷暖自知 by 张楚
    瞎掰,关于网站的推广和如何摧毁贴吧<上>
    Adobe 拟发布WEB PS
    Web阅读摘录[持续更新]
  • 原文地址:https://www.cnblogs.com/yesyes/p/7706437.html
Copyright © 2020-2023  润新知