我在将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。我错过了什么?
提前谢谢你,
伊恩
发布于 2011-11-19 20:25:37
原来的数字是:
1 0010 1111 0000 1110 0111 1111规范化我们有:
1,0010 1111 0000 1110 0111 1111 x 2²⁴由于将仅存储小数部分的23位:
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如果我理解得很好,这就是你要得到的。
发布于 2011-11-20 04:29:00
32位单精度没有足够的精度来存储YYYYMMDD日期。假设我们增加到2000万,也就是25位。所以你总是会输掉一点。
使用浮点格式要记住的一件事是,在尾数部分,第一个数字始终是1。单精度和双精度通过不存储它来利用这一点。
在您的符号中:19861119 = +1 * b1.00101111:00001110:01111111 * 2^24
因此,对于数字的三个部分,我们有:
因此,完整的数字是:
0 1001011:1 0010111:10000111:01000000
s eeeeeee e mmmmmmm mmmmmmmm mmmmmmmm或者十六进制,取决于结束度:4b978740 / 4087974b。
https://stackoverflow.com/questions/8193896
复制相似问题