读《程序是怎样跑起来的》第三章有感

本章上来就提出一个很有意思的问题,虽然我并没有尝试过100个0.1相加,也很少有在写代码时碰到小数。原来是因为有些十进制数无法转化成二进制数,0.1转化成二进制数时类似于循环小数,计算机也只能取到近似值,无法处理无限循环小数,计算机会根据变量数据类型所对应的长度将数值从中间截断或者四舍五入,这也就是计算机出错的原因。十进制小数转化成二进制时要采用“乘2取整,顺序排列”法,不查一下我还真忘了。浮点数是指用符号、尾数、基数、指数四部分组成的小数,符号部分也是0代表正数,1代表负数,数值的大小用尾数部分和指数部分来表示,在二进制中是用“尾数部分*2的指数次幂”,其中尾数部分用的是通过左移或右移“将小数点前面的数固定为1的正则表达式”,EXCESS系统是指通过将指数部分表示范围的中间值设为0,使得负数不需要通过符号表示。二进制转化为十六进制可以减少位数,看起来比较清晰。有些计算错误的微小误差可以忽略,也可以将小数先转化为整数进行计算。

 

posted @ 2019-01-27 21:47  不解风情abc  阅读(85)  评论(0编辑  收藏  举报