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

Floating point 如何用二进制表示浮点。IEEE,floating-point,binary,decimal,Floating Point,Binary,Decimal,与十进制相似,二进制数也可以表示浮点。现在我读到它可以有类似的浮动 0.5:0.1,0.25:0.01,0.125:0.001。。。等等但是,例如,0.1(十进制)是如何用二进制表示的呢 另外,给定一个十进制浮点数,如何将其转换为十进制等价物(假设它不是那么简单) 编辑:所以我知道更好的问题应该是;如何将十进制浮点转换为二进制?现在我知道我们乘以小数部分,直到它变成零。 现在很有可能两个浮点具有相同的表示形式,对吗?给定多少位 0.1b: 正如你所看到的,这是一个近似值 Binary

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

0.5
0.1
0.25
0.01
0.125
0.001
。。。等等但是,例如,0.1(十进制)是如何用二进制表示的呢

另外,给定一个十进制浮点数,如何将其转换为十进制等价物(假设它不是那么简单)

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

给定多少位

0.1b:

正如你所看到的,这是一个近似值

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^(位字符串后的位置)

所以
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个零)。

现在很有可能两个浮点具有相同的表示形式,对吗?不,使用此表示法,一位字符串只有一个值。@Sahil:当数字转换为浮点时(如通过解析包含数字的字符串并将其转换为浮点),不同的数字可以产生相同的结果。说浮点结果代表这些数字是不精确的。根据IEEE 754标准,浮点值精确地表示一个数字,即按照标准中的规定解释其编码后得到的数字。可以说,两个不同的数字可能具有相同的浮点近似值,但重要的是要记住它只是一个近似值。
postion:   |1|2|3|4|5|6|7|
         0.|0|0|0|0|0|0|1|
decimal_value = 0 
for i, bit in enumerate(binary_string):
    if bit == 1
         decimal_value += 1/2**i