Math 浮点指数的偏差值和范围

Math 浮点指数的偏差值和范围,math,floating-point,precision,ieee-754,Math,Floating Point,Precision,Ieee 754,我意识到,坐在我的大学课桌上时,我没有及时注意IEEE 754标准的浮点部分。然而,即使我目前没有为嵌入式的东西而挣扎,我也觉得自己不称职,没有资格获得工程师头衔,因为我缺乏某种数学计算方法,完全掌握了标准 我知道的是 0和255是表示0和无穷大的特殊值 价值观 有隐式1用于将23位表示为24 其中,e仅当它是000时变为1,如果它是111且尾数是0000,则它是无穷大,如果它是111且尾数是XXXX,则它不是一个数字 我不明白的是 我们如何才能包括在内地提到-126和127?总的

我意识到,坐在我的大学课桌上时,我没有及时注意IEEE 754标准的浮点部分。然而,即使我目前没有为嵌入式的东西而挣扎,我也觉得自己不称职,没有资格获得工程师头衔,因为我缺乏某种数学计算方法,完全掌握了标准

我知道的是

  • 0
    255
    是表示
    0
    无穷大的特殊值
    价值观

  • 有隐式
    1
    用于将
    23位
    表示为
    24

  • 其中,
    e
    仅当它是
    000
    时变为1,如果它是
    111
    且尾数是
    0000
    ,则它是无穷大,如果它是
    111
    且尾数是
    XXXX
    ,则它不是一个数字

我不明白的是

  • 我们如何才能包括在内地提到
    -126
    127
    ?总的可能性是多少 254个值作为包含值进行分段
  • 为什么选择
    127
    作为偏差值

  • 一些资料来源解释分段为
    [-126..127]
    但是。这真是错综复杂
  • 如果不是前面提到的第二个来源,我们怎么能说最小的
    2^{-126}
    ?如果它是
    2^{-125}
    ?(虽然苦苦挣扎,但我至今仍无法用头脑去理解它:)
  • 对偏差值使用模余数运算符而不是减法(即
    2^{e%127}
    )不是更合乎逻辑吗?(由于以下原因进行了更正)

  • 指数范围

    对于32位浮点,原始指数
    rexp
    为8位
    ,偏差为
    127
    。排除特殊情况
    {0255}
    我们得到
    应用偏差:

    expmin =   1-127 = -126
    expmax = 254-127 = +127
    
    非规范值没有隐式1,因此对于最小数,mantisa为
    1
    ,如果指数应指向mantisa的lsb,则我们需要再移动几次:

    expmin =   0-127-(23-1) = -149
    
    正常最大值将与最大mantisa一致,因此:

    max = ((2^24)-1)*(2^127) =  (2^24)*(2^127) - (2^127) = 2^151 - 2^127
    
    因此
    float
    的实际范围(包括非规范值)为:

    <2^-149  ,2^+151  )
    <1.40e-45,2.85e+45) 
    
    使正指数和负指数的范围尽可能相同

    使用
    exp=rexp%127
    将不会从unsigned
    rexp
    中获得负值,无论除法操作是否缓慢(至少在创建规范时)。。。这就是为什么
    exp=rexp偏差

    我们如何才能包括在内地提到
    -126
    127
    ?如何将所有可能的254个值划分为包含值

    IEEE 754-2008 3.3规定,任何格式的最小指数emin应为1−emax,其中emax是最大指数。该条款中的表3.2规定32位格式(命名为“binary32”)的emax应为127。所以艾敏是1−127 = −126

    没有数学上的限制来迫使这一点。选择这种关系是出于偏好。我记得有一种愿望,希望积极的指数略高于消极的指数,但我不记得这样做的理由

    为什么选择
    127
    作为偏差值

    一旦选择了上述边界,127就必然是将其编码为8位所需的值(作为代码1-254,而将0和255作为特殊代码)


    一些资料来源解释分段为
    [-126..127]
    ,但一些
    [-125…128]
    。这真是错综复杂

    给定二进制32的位,即符号位S、八个指数位E(表示数字E的二进制)和23个有效位F(表示数字F的二进制),并给定0
    • 所代表的数字是(−1) S•2e−127•(1+f/223)
    • 所代表的数字是(−1) S•2e−127•1.F2
    • 所代表的数字是(−1) S•2e−126•(½+f/224)
    • 所代表的数字是(−1) S•2e−126•.1F2
    • 所代表的数字是(−1) S•2e−150•(223+f)
    • 所代表的数字是(−1) S•2e−150•1F.2
    前两种方法的不同之处在于,第一种方法将有效位F作为二进制数字处理,得到一个数字F,然后将该数字除以223并加1,而第二种方法使用23个有效位F写入一个24位数字“1.F”,然后将其解释为二进制数字。这两种方法产生相同的值

    第一对和第二对的区别在于,第一对在半开区间[1,2]中准备一个有效位,而第二对在半开区间[½,1]中准备一个有效位,并调整指数进行补偿。乘积相同

    第一对和第三对之间的差异也是一个缩放。第三对缩放有效位,使其成为整数。第一种形式在讨论浮点数时最常见,但第三种形式对于数学证明很有用,因为数论通常与整数一起工作。这种形式是also在IEEE 754中顺便提及,也在第3.3条中提及

    如果不是前面提到的第二个来源,我们怎么能说最小的
    2^{-126}

    最小正正常值有S位0、E位00000001和F位00000000000000000。在第一种形式中,这表示+1•21−127 • 1 = 2−126.在第二种形式中,它表示+1•21−126 • ½ = 2−126.在第三种形式中,它表示+1•21-150•223=2−126.所以形式是不相关的;表示的值是相同的

    使用余数运算符不是更多吗
    <2^-126   ,2^+127  >
    <1.175e-38,1.701e38>
    
    bias = (0+255)/2 = 127