[英]How to represent floating point in binary. IEEE
类似于十进制的二进制数也可以表示浮点数。 现在我读到它可以有类似的浮点数
0.5
: 0.1
, 0.25
: 0.01
, 0.125
: 0.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.