【发布时间】:2018-10-12 21:38:30
【问题描述】:
假设 N 是根据 IEEE754 单精度标准表示的任意数。我想在 IEEE754 中再次找到 N/2 的最精确表示。
我想找到一个通用算法(用文字描述,我只想考虑必要的步骤和案例)来获得表示。
我的做法是:
说数字代表:b0_b1_b2_b3...b_34。
- 隔离确定数字符号 (-/+) 的第一位。
- 根据无符号表示
b_1...b_11计算幂 (p) 的表示。 - 如果
power = 128我们有一个特殊情况。如果尾数的所有位都等于 0,则根据b_0,我们有负无穷大或正无穷大。我们不会改变任何东西。如果尾数至少有一位等于 1,那么我们就有NaN值。同样,我们什么也没做。 - 如果
e is inside]-126, 127[then we have a normalized mantissam.新的幂p can be calculated asp' = p - 1and belongs in the interval]-127, 126]. We then calculatem/2` 我们从右边开始表示它并丢失任何不能包含在 23 位中的位尾数。 - 如果
e = -126,那么在计算这个数字的一半时,我们传入一个非规范化尾数。我们代表p = 127,计算尾数的一半并从右边开始重新代表它,丢失任何不能包含的信息。 - 最后,如果
e = -127我们有一个非规范化尾数。只要m/2可以用尾数中可用的位数表示而不会丢失信息,我们就表示并保留p = -127。在任何其他情况下,我们将数字表示为正数或负数 0,具体取决于b_0
我遗漏的任何步骤、可以进行的任何改进(我相信有)或任何看起来完全错误的地方?
【问题讨论】:
-
没有“简单精度”。有单精度和双精度。使用 64 位,您说的是 double 精度。
-
Power = 128 not 是一种特殊情况(对于单 或 双精度)。 This wikipedia article 应该会有所帮助,假设您使用的是双精度。
-
好的,我正在学习另一种语言,而不是英语,其中单精度是所用术语的直译,简单精度。至于你说得对的 64 位,我犯了一个错误,整篇文章都是关于单精度的,因此是 34 位。为什么 p = 128 不是一个特殊情况,不对应于 (+/-) infty 或 NaN?@user3386109
-
Here's the page for single precision,解释了指数的特殊情况。
-
p = 127...你是对的。我认为其他一切似乎都很好
标签: algorithm binary numbers ieee-754