Как я преобразовываю от десятичного числа до IEEE 754 формат с плавающей точкой с одинарной точностью?

Как я пошел бы о ручном изменении десятичного числа (базируйтесь 10), число в IEEE 754 формат с плавающей точкой с одинарной точностью? Я понимаю, что существует три части к нему, знак, экспонента и мантисса. Я просто не полностью понимаю то, что на самом деле представляют последние две части.

20
задан Pascal Cuoq 2 April 2016 в 22:25
поделиться

2 ответа

Найдите наибольшую степень двойки, которая меньше вашего числа, например, если вы начинаете с x = 10,0, то 2 3 = 8, поэтому показатель степени равен 3. Показатель степени смещен на 127, так что это означает, что показатель степени будет представлен как 127 + 3 = 130. Мантисса тогда будет 10,0 / 8 = 1,25. 1 является неявной, поэтому нам просто нужно представить 0,25, что составляет 010 0000 0000 0000 0000 0000, когда оно выражается как 23-битное дробное количество без знака. Знаковый бит равен 0 для положительного. Итак, у нас есть:

s | exp [130]  | mantissa [(1).25]            |

0 | 100 0001 0 | 010 0000 0000 0000 0000 0000 |

0x41200000

Вы можете протестировать представление с помощью простой программы на C, например

#include <stdio.h>

typedef union
{
    int i;
    float f;
} U;

int main(void)
{
    U u;

    u.f = 10.0;

    printf("%g = %#x\n", u.f, u.i);

    return 0;
}
26
ответ дан 29 November 2019 в 23:33
поделиться

Число с плавающей запятой - это просто научная нотация. Допустим, я попросил вас выразить окружность Земли в метрах, используя научную нотацию. Вы бы написали:

4.007516×107м

Экспонента экспонента - это именно она: сила десяти. Мантисса - это собственно цифры числа. А знак, конечно же, просто положительный или отрицательный. Так что в данном случае экспонента равна 7, а мантисса - 4.007516.

Единственное существенное различие между IEEE754 и школьной научной нотацией заключается в том, что числа с плавающей запятой находятся в основании 2, поэтому они не умножаются на десять, а умножаются на два. Поэтому там, где, скажем, 256 в обычной научной нотации записывается как:

2.56×102 (мантисса 2.56 и экспонента 2),

в IEEE754 это

1×28 - мантисса равна 1, а экспонента 8.

8
ответ дан 29 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: