求计算机表示浮点数的方法
是固定一种方法还是和硬件有关系?
比如我想像25.6543这样的数,去掉它的点,也就是扩大一万倍,化成2进制,运算完了再把点加上不就行了?这样不就没有误差了,不过计算机怎么处理那个点?
百度了一下,好像把纯小数部分乘以2再取整,最后和原来数的整数部分的二进制合到一起,例如1.7就是1.1011
但是计算机会不会采用前面那种笨办法呢(扩大成整数)
大家可以讨论一下啊,这个应该是很基础的知识吧。
[解决办法]
看计算机体系结构
[解决办法]
我记得在学数字电路的时候讲十进制转换为二进制的时候说的是小数部分乘2,然后取整数部分,直到乘的得结果为整数1为止,取得的整数部分正向排列。
在计算机中的数据应该都是二进制存储的,而二进制转换为10进制是按位权展开的,上面的方法是位权展开的逆向应用,所以我觉得计算机应该用的是这种方法。
[解决办法]
这是个不错的想法,但是运算量比较大
[解决办法]
学习一下IEEE754(http://en.wikipedia.org/wiki/IEEE_floating_point)浮点数规格。
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
[解决办法]
浮点数包括float和double两种类型,float占32位,double占64位。其二进制存储格式遵循IEEE754标准。
以32位的float为例,存储的时候包含1bit符号位,8bit阶码,23bit尾数。
有的cpu里面有硬件协处理器,的确可以增强浮点运算能力。
[解决办法]
如果有容易实现、又完美的方法,估计标准委员会的那些大牛们也不会想不到。
浮点数的格式不只是123.456这样,还包括(负零-0)、反常值(denormal number)、特殊数值(无穷与非数值(NaN))等等。
[解决办法]
和硬件相关的。不然的话,效率会很低。要看CPU支持什么格式的浮点数。