我不确定我所做的是否是解决这个问题的最佳方法:
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表示是好的吗?我怎样才能找到正确数量的无花果?会否与上述规则相同?
发布于 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位小数的浮点数,然后再回过一次,而不改变数值,
p log10 b if b is a power of 10
ceiling(1 + p log10 b) otherwise"IEEE-754单机的9
https://stackoverflow.com/questions/21560193
复制相似问题