Данный листок посвящен проблеме записи дробных чисел в двоичной системе счисления и представлению действительных чисел в памяти компьютера.
Для получения двоичного представления числа типа 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)
Рекомендуемые к изучению статьи с описанием формата представления действительных чисел: