Загрузка данных


import struct

def decode_ieee754(n: int, verbose: bool = False) -> float:
    """
    Разбирает 32-битное целое число на компоненты стандарта IEEE 754 
    и вычисляет число с плавающей точкой (float).
    """
    # Определение битовых масок для 32-битного числа[span_0](start_span)[span_0](end_span)
    sign_bit_mask = 0x80_00_00_00      # 31 бит[span_1](start_span)[span_1](end_span)
    exp_bit_mask = 0x7F_80_00_00       # 30-23 биты[span_2](start_span)[span_2](end_span)
    significand_bit_mask = 0x00_7F_FF_FF # 22-0 биты[span_3](start_span)[span_3](end_span)

    # Извлечение знака, экспоненты и мантиссы (significand) с помощью побитовых операций[span_4](start_span)[span_4](end_span)
    sign = (n & sign_bit_mask) >> 31[span_5](start_span)[span_5](end_span)
    exp = (n & exp_bit_mask) >> 23[span_6](start_span)[span_6](end_span)
    significand = (n & significand_bit_mask)[span_7](start_span)[span_7](end_span)

    # Вычисление итогового значения по формуле стандарта IEEE 754[span_8](start_span)[span_8](end_span)
    # Добавлена проверка на 0, чтобы избежать ошибок при нулевой экспоненте
    if exp == 0 and significand == 0:
        float_from_ieee754 = 0.0
    else:
        float_from_ieee754 = (-1)**sign * 2**(exp - 127) * (1 + significand / 2**23)[span_9](start_span)[span_9](end_span)

    # Блок вывода информации, если включен режим verbose
    if verbose:
        print(f"Число n: {n:032b}")[span_10](start_span)[span_10](end_span)
        print(f"31 (sign):    {sign:032b} (dec: {sign})")[span_11](start_span)[span_11](end_span)[span_12](start_span)[span_12](end_span)
        print(f"exp.:         {exp:032b} (dec: {exp})")[span_13](start_span)[span_13](end_span)[span_14](start_span)[span_14](end_span)
        print(f"22-0 (mant.): {significand:032b} (dec: {significand})")[span_15](start_span)[span_15](end_span)[span_16](start_span)[span_16](end_span)
        
        # Проверка через встроенный модуль struct (исправлена синтаксическая ошибка)[span_17](start_span)[span_17](end_span)
        raw_bytes = struct.pack('>I', n)[span_18](start_span)[span_18](end_span)
        # unpack возвращает кортеж, поэтому берем первый элемент [0]
        float_from_bytes = struct.unpack('>f', raw_bytes)[0] 
        print(f"\nЗначение через struct:  {float_from_bytes}")
        print(f"Значение через формулу: {float_from_ieee754}")[span_19](start_span)[span_19](end_span)

    return float_from_ieee754

# Пример использования функции:
number = 12345678[span_20](start_span)[span_20](end_span)
result = decode_ieee754(number, verbose=True)