Skip to content

Float: внутреннее устройство

Так как физически сложно хранить значения чисел с плавающей точкой, они хранятся в дробной части. Основанием дробной части является число степени 2.

Раньше разные процессоры выдавали разный результат, так как не было общего стандарта. Сейчас в большинстве процессоров используется общий стандарт IEEE754.

S (sign) — так же, как в int, старший бит, отвечающий за знак в числе: либо число положительное, либо отрицательное.

E (exponent) — экспонента, дробная часть.

M (matissa/fraction) — число после запятой.

Эта схема актуальна для типов float32, по  формуле можно вычислить числа float32.

Рассмотрим пример с числом 0.15625

Вычисляем экспоненту.

Подставляем в формулу значения и вычисляем.

Так как процесс конвертации float входит в стандарт IEEE754, при конвертации вызывается команда процессора, например, при конвертации int и float используется инструкция процессора, о которой ты можешь прочесть подробнее по указанной ссылке.

Из-за непрозрачного процесса конвертации воспользуемся пакетом unsafe для прямого указания типа по памяти.

Разработчики golang не рекомендуют использовать этот пакет в рабочем коде. Это внутренний пакет для разработки самого языка.