Откройте контекст
Выберите папку проекта и обозначьте нужные файлы или поведение.
Измерьте расстояние в представимых шагах между двумя конечными числами binary64, считая знаковые нули равными. Проверьте соседние субнормальные числа и оба знака, отклоняя целые числа, бесконечности и NaN без толкования результата как относительной ошибки.
Выберите папку проекта и обозначьте нужные файлы или поведение.
Укажите входные данные, ожидаемый результат и границы, которые нужно сохранить.
Проверьте предлагаемые изменения и команды, прежде чем полагаться на результат.
Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.
import math, struct
def ulp_distance(a, b):
if any(type(x) is not float or not math.isfinite(x) for x in (a, b)):
raise ValueError("ulp.finite")
def key(value):
bits = struct.unpack(">Q", struct.pack(">d", value))[0]
magnitude = bits & ((1 << 63)-1)
return (1 << 63)-magnitude if bits >> 63 else (1 << 63)+magnitude
return abs(key(a)-key(b))
Пример — отправная точка для реального проекта, а не утверждение, что сгенерированный код уже протестирован. Адаптируйте пути, зависимости и ожидаемое поведение к своему приложению.