Представление действительных чисел

Данный листок посвящен проблеме записи дробных чисел в двоичной системе счисления и представлению действительных чисел в памяти компьютера.

Для получения двоичного представления числа типа float можно использовать метод hex типа float, который возвращает текстовую строку с 16-ричным представлением числа типа float. Но этот метод не дает полного представления о формате хранения чисел типа float.

Для представления действительных чисел с плавающей точкой стандарт IEEE 754 определяет несколько различных форматов хранения числа, из которых наиболее распространенными в настоящий момент являются числа одинарной точности (4 байта), двойной точности (8 байт) и расширенной точности (10 байт). В языке Python числа типа float соответствуют числам двойной точности стандарта IEEE 754.

Для чисел типа float есть возможность получить точное двоичное представление числа. Для этого можно использовать функцию pack из модуля struct. Пример:

import struct
val = 0.1
res = struct.pack('d', val)

Объект res имеет тип bytes, этот тип используется для хранения двоичных данных в виде последовательности байт. Количество байт в объекте можно вычислить при помощи функции len, к конкретному байту можно обратиться по индексу.

Пример использования модуля struct для получения представления числа типа float в двоичной и шестнадцатеричной системах счисления.

import struct
val = 0.1
b = struct.pack('d', val)
HEX = ""
BIN = ""
for elem in b[::-1]:
    HEX += hex(elem)[2:].rjust(2, '0') + " "
    BIN += bin(elem)[2:].rjust(8, '0') + " "
print(HEX)
print(BIN)

Рекомендуемые к изучению статьи с описанием формата представления действительных чисел:

  1. Статья на algoprog.ru
  2. Статья на викиконспектах