types - IEEE-754 float 是如何工作的

标签 types floating-point ieee-754

假设我有这个:

float i = 1.5

在二进制中,这个浮点数表示为:

0 01111111 10000000000000000000000

我分解了二进制以表示“有符号”、“指数”和“分数”块。

我不明白的是这如何代表 1.5。

减去偏差 (127 - 127) 后,指数为 0,隐式领先的小数部分为 1.1。

1.1 如何不缩放 = 1.5???

最佳答案

首先考虑十进制(基数为 10):643.72 是:

  • (6 * 102) +
  • (4 * 101) +
  • (3 * 100) +
  • (7 * 10-1) +
  • (2 * 10-2)

  • 或 600 + 40 + 3 + 7/10 + 2/100。

    这是因为 n0 始终为 1,n-1 与 1/n 相同(对于特定情况)并且 n-m 与 1/nm 相同(对于更一般的情况)。

    同样,二进制数 1.1 是:
  • (1 * 20) +
  • (1 * 2-1)

  • 20 是一,2-1 是二分之一。

    在十进制中,小数点左边的数字有乘数 1、10、100 等,从小数点向左,1/10、1/100、1/1000 向右(即 102、101、 100、小数点、10-1、10-2、...)。

    在基数 2 中,二进制小数点左侧的数字具有乘数 1、2、4、8、16 等,向左排列。右边的数字有乘数 1/2、1/4、1/8 等等。

    因此,例如,二进制数:
    101.00101
    | |   | |
    | |   | +- 1/32
    | |   +---  1/8
    | +-------    1
    +---------    4
    

    相当于:
    4 + 1 + 1/8 + 1/32
    

    或者:
        5
    5  --
       32
    

    关于types - IEEE-754 float 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2706851/

    相关文章:

    haskell - 在这种情况下如何使用 mapM_

    ios - 在 Double 中获得奇怪的值(value)

    node.js - 在 Node 中将 ieee754 转换为十进制

    Python 数学模块对数函数

    c++ - 处理我的数据的更有效方式(整数与 float )

    c# - c# 是否有 VB.NET 等效的速记数组声明,如 {"string1","string2"}?

    java - Java中可变大小的数据类型?

    python - 在 NumPy 中提取浮点有效数和指数

    python - python float 的精度(小数点)是多少?

    c++ - 非 IEEE 754 浮点类型的大小如何受到限制?