Some Problems of Floating Point

最近,在学习CS61C时,讲到了浮点数。老师提到了0的IEEE 754表示方法,就是当指数部分和小数部分均为0的时候,默认为0。这下我可纠结了,那1.0呢,按道理不也是指数和小数均为0么。毕竟1.0 = (-1)^0 * (1+ 0.0) * 2^0。于是到处找原因,最终发现了一个神器。

Harald SchmidtIEEE 754 Converter简单直接地解决了所有问题。

0.0

image

1.0

image

infinity

image

所以,我犯的错是没有考虑到老师所说的阶码已经是以127为bias的移码了。即,阶码为0,小数为0时,是0.0;阶码为127,小数为0时,是1.0;阶码为255,小数为0时,是无穷大;而阶码为255,小数不为0时,是NaN。

当然,这顺便也解释了为什么bias是127。因为8位unsigned integer可以表示0~255,除去0和255,剩余1~254用来表示。0.0对应阶码实际为2^(-127),infinity对应为2^128。于是1~254对应于-126~127,自然,偏移值是127。

changecheng 21 September 2014
blog comments powered by Disqus