首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ieee浮点格式

ieee浮点格式
EN

Stack Overflow用户
提问于 2011-11-19 19:59:03
回答 2查看 417关注 0票数 1

我在将19861119转换成ieee浮点格式(单精度)时遇到了问题。我希望有人能告诉我我在哪里迷路了。

在二进制中,该值是b1.00101111:00001110:01111111 * 2^24,即b1:00101111:00001110:01111111 (使用:标记来自rhs的每8位)。所以浮点数是b00101111:00001110:01111111,偏置指数是24 + 127 = 151 = b10010111。浮点数是24位长,但ieee格式只允许23位,这在我看来是有问题的。格式是否缺乏足够的精度来存储yyyymmdd日期?

在考虑到低字节顺序之后,这就是x4b978740。我错过了什么?

提前谢谢你,

伊恩

EN

回答 2

Stack Overflow用户

发布于 2011-11-19 20:25:37

原来的数字是:

代码语言:javascript
复制
1 0010 1111 0000 1110 0111 1111

规范化我们有:

代码语言:javascript
复制
1,0010 1111 0000 1110 0111 1111 x 2²⁴

由于将仅存储小数部分的23位:

代码语言:javascript
复制
  1,0010 1111 0000 1110 0111 111 x 2²⁴
                              +1 (if rounded)
= 1,0010 1111 0000 1110 1000 000 x 2²⁴

= 0|100 1011 1|001 0111 1000 0111 0100 0000
  s    exp         23 bit fractional part
= 0x4B978740

如果我理解得很好,这就是你要得到的。

票数 1
EN

Stack Overflow用户

发布于 2011-11-20 04:29:00

32位单精度没有足够的精度来存储YYYYMMDD日期。假设我们增加到2000万,也就是25位。所以你总是会输掉一点。

使用浮点格式要记住的一件事是,在尾数部分,第一个数字始终是1。单精度和双精度通过不存储它来利用这一点。

在您的符号中:19861119 = +1 * b1.00101111:00001110:01111111 * 2^24

因此,对于数字的三个部分,我们有:

  1. 符号是0。
  2. 指数部分是127 + 24 = 151 =b1001011:1
  3. 尾数部分是初始零之后的前23位,舍入到偶数:`0010111:10000111:01000000

因此,完整的数字是:

代码语言:javascript
复制
0 1001011:1 0010111:10000111:01000000
s eeeeeee e mmmmmmm mmmmmmmm mmmmmmmm

或者十六进制,取决于结束度:4b978740 / 4087974b

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8193896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档