有人可以向我解释将十进制格式的数字(例如2+(2/7))转换为IEEE 754浮点表示的步骤吗?谢谢!
答案 0 :(得分:1)
首先,2 + 2/7
不是大多数人所谓的“十进制格式”。 “十进制格式”更常用于表示如下数字:
2.285714285714285714285714285714285714285714...
即使...
有点快又宽松。更常见的是,该数字将被截断或舍入为某些十进制数字:
2.2857142857142857
当然,此时它已不再完全等于2 + 2/7
,但对于大多数用途而言“足够接近”。
我们做类似的事情,将数字转换为IEEE-754格式;而不是基数10,我们首先在基数2中写入数字:
10.010010010010010010010010010010010010010010010010010010010010...
接下来,我们通过将2^e * 1.xxx...
形式写入某个指数e
(具体地说,我们数字的前导位的数字位置)来“标准化”该数字:
2^1 * 1.0010010010010010010010010010010010010010010010010010010010010...
此时,我们必须选择特定的IEEE-754格式,因为我们需要知道要保留多少位数。让我们选择“单精度”,它具有24位有效数。我们将重复的二进制数舍入为24位:
2^1 * 1.00100100100100100100100 10010010010010010010010010010010010010...
24 leading bits bits to be rounded away
由于要舍入的尾随位大于1000...
,因此该数字向上舍入为:
2^1 * 1.00100100100100100100101
现在,该值如何实际以IEEE-754格式编码?单精度格式具有前导符号(零,因为数字为正),后跟八位,包含二进制值127 + e
,后跟有效数的小数部分:
0 10000000 00100100100100100100101
s exponent fraction of significand
以十六进制表示0x40124925
。