2011-04-21 104 views
0

有人可以向我解释将十进制格式(如2+(2/7))转换为IEEE 754浮点表示的步骤吗?谢谢!如何将2+(2/7)转换为IEEE 754浮点

+0

你问关于汇编代码中的算术表达式求值器,还是什么? – 2011-04-21 23:46:24

+0

算术表达式 – 2011-04-21 23:50:55

+0

你的意思不仅仅是“2.0+(2.0/7.0)”?你想在IEEE754中使用这些数字的二进制表示形式,以及关于加法和除法如何工作的描述,或者其他什么? – 2011-04-22 16:56:35

回答

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格式编码?单精度格式中已处于领先signbit(零,这是因为数是正的),之后是包含二进制值127 + e八位,后跟该有效的小数部分:

0 10000000 00100100100100100100101 
s exponent fraction of significand 

在十六进制这给了0x40124925

相关问题