繁体   English   中英

如何用二进制表示浮点数。 IEEE

[英]How to represent floating point in binary. IEEE

类似于十进制的二进制数也可以表示浮点数。 现在我读到它可以有类似的浮点数

0.50.10.250.010.1250.001 ...等等。 但是,例如,如何用二进制表示0.1(十进制)?

同样,给定十进制浮点数,如何将其转换为等效的十进制数(如果不是那么简单的话)。

编辑:所以我知道更好的问题应该是; 如何将十进制浮点数转换为二进制? 现在我知道我们将小数部分相乘,直到变成零。 现在很有可能两个浮点可以具有相同的表示形式吗?

给出多少位?

0.1B:

0.00011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011...

如您所见,这是一个近似值。

Binary                                          Decimal
0.1     == 1/2^1         == 1/2              == 0.5
0.01    == 1/2^2         == 1/4              == 0.25
0.11    == 1/2^1 + 1/2^2 == 1/2 + 1/4 == 3/4 == 0.75

小数点后的每一位代表1/2 ^(position_after_bit_string)。

postion:   |1|2|3|4|5|6|7|
         0.|0|0|0|0|0|0|1|

因此0.0000001 = 1/2^7 = 0.0078125

伪代码:

decimal_value = 0 
for i, bit in enumerate(binary_string):
    if bit == 1
         decimal_value += 1/2**i

有关更多信息, 为什么十进制数字不能完全用二进制表示?

另一个可能有用的观察。 浮点数的“整数部分”以其“正常”形式存在于二进制文件中,例如,如果值是25.7482,则浮点数中将具有位“ 11001”(25),其后的位表示分数(实际上,从不存储第一个“ 1”,它以格式表示)。 如果从该数字中减去25.0,然后乘以10,则得到7.482,通过检查该值的整数部分,您可以获得第一个小数位'7'。

减去7.0,乘以10得到4.82,即下一个数字'4',依此类推。 理论上,此过程最终将以零结果结束,因为可以以浮点格式精确表示的所有值都具有精确的十进制表示; 但是,鉴于原始浮点的精度,“精确”结果的位数可能远远超出实际合理的数字(无论如何,您内部可能需要额外的精度才能获得完全准确的结果-您需要确保乘以10不会产生舍入错误)。

而且,对于6.432e-200之类的数字,此方法可行,但效率不高(在第一个“ 6”出现之前,您将生成199个零)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM