【问题标题】:How to represent floating point in binary. IEEE如何用二进制表示浮点数。 IEEE
【发布时间】:2012-12-01 19:41:59
【问题描述】:

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

0.5:0.1 , 0.25:0.01 , 0.125:0.001 ... 等等。但是,例如,0.1(十进制)如何以二进制表示?

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

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

【问题讨论】:

    标签: floating-point binary decimal


    【解决方案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
    

    radix point 之后的每一位代表 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
    

    更多信息Why can't decimal numbers be represented exactly in binary?

    【讨论】:

    • 现在很有可能两个浮点可以有相同的表示,对吧?
    • 不,使用这种表示法,一个位串只有一个值。
    • @Sahil:当数字转换为浮点数时(例如通过解析包含数字的字符串并将其转换为浮点数),不同的数字可以产生相同的结果。说浮点结果代表这些数字是不准确的。根据 IEEE 754 标准,浮点值恰好代表一个数字,您可以通过按照标准中指定的方式解释其编码来获得该数字。您可以说两个不同的数字在浮点数中可能具有相同的近似值,但重要的是要记住它只是一个近似值。
    【解决方案2】:

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

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

    而且,对于像 6.432e-200 这样的数字,这种方法是可行的,但不是很有效(在第一个 '6' 出现之前你会生成 199 个零)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 2016-05-01
      相关资源
      最近更新 更多