首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从32位二进制数IEEE-754单精度表示计算实数X

从32位二进制数IEEE-754单精度表示计算实数X
EN

Stack Overflow用户
提问于 2014-02-04 18:14:28
回答 1查看 223关注 0票数 2

我不确定我所做的是否是解决这个问题的最佳方法:

0010 0010 0001 1110 1100 1110 0000

我分头说:

符号:0 (阳性)

指数: 0100 0100 (基数2) -> 2^2 + 2^6 = 68 ->超额127: 68 - 127 = -59 (基数10)

尾数:(1)需要的.001 1110111万->十进制数: d-10 = d-2 * log2 / log10 = 24 * log2 / log10 = 7.22 ~8(老师告诉我们要随时集合)

因此,基数10的尾数为: 2^0 + 2^-3 + 2^-4 + 2^-5 + 2^-6 + 2^-8 + 2^-9 + 2^-12 + 2^-13 + 2^-14 = 1.2406616 (基数10)

因此,实际数字是:

+1.2406616 * 2^(-59) = 2.1522048 * 10^-18

但是10^x表示是好的吗?我怎样才能找到正确数量的无花果?会否与上述规则相同?

EN

回答 1

Stack Overflow用户

发布于 2014-02-04 18:48:58

表示法几乎是好的。我想说你总共需要9位(你有8位数字)。

请参阅Printf width specifier to maintain precision of floating-point value

有效数字的正确数目取决于什么是正确的意思。

如果要打印到x重要小数位,并将其读回并确保再次具有相同的数字x,那么对于所有IEEE-754单数,总共需要9位小数。1在“之前”和“8”之后。用科学符号。有些数字可以用较少的数字表示,但有些数字需要多达9的数字。

在C中,这被定义为FLT_DECIMAL_DIG

打印超过9不伤害,它只是没有转换成不同的IEEE-754单精度号码,只有9被使用。

OTOH如果以带有y有效数字的文本十进制数开始,将其转换为IEEE-754单数,然后返回到文本,那么您应该始终依赖的大多数y数字是6。

在C中,这被定义为FLT_DIG

最后,我会说d-10 = d-2 * log2 / log10几乎是对的。但是由于2 (IEEE-754单)和10 (x.xxxxxxxx * 10 ^ expo)的幂不匹配(预期为1.0),所以文本使用的精度是FLT_DECIMAL_DIG

“小数位数,n,这样任何带有p基b位数的浮点数都可以四舍五入为有n位小数的浮点数,然后再回过一次,而不改变数值,

代码语言:javascript
复制
p log10 b              if b is a power of 10
ceiling(1 + p log10 b) otherwise"

IEEE-754单机的9

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

https://stackoverflow.com/questions/21560193

复制
相关文章

相似问题

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