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


from struct import pack, unpack
def get_next_float(value: float) -> float:
    """
    Принимает float число и возвращает следующее за ним 
    минимально возможное число с плавающей точкой (ULP).
    """
    # Шаг 1: Конвертируем float в сырые байты (double, 8 байт)
    raw_bytes = pack(">d", value)

    # Шаг 2: Интерпретируем эти байты как целое 64-битное число
    int_from_float = unpack(">Q", raw_bytes)[0]

    # Шаг 3: Шаг к следующему битовому представлению (+1)
    next_int_from_float = int_from_float + 1

    # Шаг 4: Конвертируем обратно в байты и затем во float
    next_float = unpack(">d", pack(">Q", next_int_from_float))[0]

    return next_float

a = 0.1
b = 0.2
c = 0.3

calculated_sum = a + b
next_after_c = get_next_float(c)

print(f"Сумма a + b:             {calculated_sum:.20f}")
print(f"Истинное c:       {c:.20f}")
print(f"Следующее число после c: {next_after_c:.20f}")

is_next = (calculated_sum == next_after_c)
print(f"\nРезультат (a + b) равен следующему за 0.3 числу? {is_next}")