【问题标题】:IEEE 754 multiplication small numbersIEEE 754 乘法小数
【发布时间】:2020-09-23 21:14:32
【问题描述】:

我想把这两个数相乘:

00100010000000000000000000000000 (1.73472347598e-18)

00010101000000000000000000000001 (-2.997414069111348324895269018E-38)

规则是:

(e1-127) +e2

所以指数是

(68 - 127) + 42 = -17

-17 不能以 IEEE754 格式表示

这个计算器说指数是-126。 但是我怎样才能手动计算呢?

【问题讨论】:

    标签: floating-point ieee-754


    【解决方案1】:

    第一个:更正

    00010101000000000000000000000001 不是-2.997414069111348324895269018E-38,而是2.58493972238e-26
    IEEE-754 Floating Point Converter


    1.73472347598e-18 * 2.58493972238e-26 的乘积约为4.48416e-44 或十六进制/二进制表示法0x1.0000002p-144。 -144 - (-127) 是追捧的-17。

    如何手动计算?
    表示指数是-126

    “-17 不能用 IEEE754 格式表示”不太正确。

    乘积小于最小的归一化值(有偏指数小于1),但大于最小的次正态值。 IEEE format 牺牲精度来扩展微小值的范围。将 -17 增加到 1(即 -126 的有偏指数)并将有效位 0x1.000002 18 右移。

    s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
    0 00000000 00000000000000000100000
    

    +0.000000000000000001000002*21-127

    当编码的偏差指数为 0 时,将编码解释为好像偏差指数为 1,但隐含的 1 位现在为 0。

    【讨论】:

    • 我真的不明白为什么我应该向右移动 18。在 -126 偏置指数处,我有两种模式。当指数为 0 时,第一个字符为 0,当指数为 1 时,第一个字符为 1。所以我想只向右移动 17 次。
    • @wwwwwwwwwwww 不使用 sub-normal 数字,最小 normalized 值为 1.0*2^-126 编码为0 00000001 (1.)00000000000000000000000..编码 1.0*2^-127,我们右移一次:0.1*2^-126 并编码为0 00000000 (0.)10000000000000000000000 我们需要编码 4.48416e-44 或 1.0*2^-144 或将 1 右移 18 次为 0.000 '000'000'000'000'001*2^-126 并编码为0 00000000 (0.)00000000000000000100000
    • @wwwwwwwwwwww "在 -126 的偏置指数我有 ..." --> The_biased exponent_ 是 8 位,值为 0 到 255。当它为 0 时,二进制指数为 -126。当为 [1...254] 时,二进制指数为biased exponent - 127
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多