找回密码
 注册
X系列官方授权正版
搜索
查看: 5011|回复: 1

[讨论] 为什么电脑不用两个整数来表示小数?

[复制链接]
发表于 2014-3-4 16:49:39 | 显示全部楼层 |阅读模式
例如一个小数f
计算机会把f拆分成x个2的n次幂,使这x个数相加等于f。例如0.5=2^(-1) 0.125=2^(-3),那么0.625=2^(-1)+2^(-3)。
但问题就在于,不是所有小数都能写成X个2的N次幂相加的。例如0.7,电脑只能处理成0.699999999直到达到精度要求。这也就导致了浮点数无可避免的误差
那么为什么计算机不这样来表示一个小数——将小数写作x.y,这样一来x和y都是一个整数(32位int),再用一个变量z(8位int应该足够)来记录补零的个数以应对补零的情况(例如12.00012,就写成x=12,z=3,y=12,解码为12(x) .000(z) 12(y)),这样一来计算机可以毫无压力的精确表达出任意小数(至少当小数有效数字在9位以内时都可以确保是精确值)。这样虽然占用了2.25倍于原先的内存(原先一个float占用32位内存,现在是32+32+8),但是运算精度却得到了极大的提升,在一些运算上应该很有用的吧。
发表于 2014-3-15 12:08:39 | 显示全部楼层
计算机表示数据的方法只有1和0
计算数据的方式只有左移位、右移位、加、减
那么按照你的方法来做的话,得消耗多少条CPU指令才能完成这个简单的加减运算?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|DeepTimes.NET 太空游戏站