Как вы найдете самый большой поплавок ниже некоторого значения? - PullRequest
3 голосов
/ 17 июня 2019

Учитывая число с плавающей запятой x, я хотел бы найти наибольшее число с плавающей запятой, которое меньше x.Как я могу сделать это в Python?

Я пытался вычесть эпсилон машины из x (x - numpy.finfo(float).eps), но для достаточно больших чисел с плавающей запятой x, и мне нужно значение, которое я получаюобратно быть строго меньше, чем x.

Есть некоторая информация о том, как это сделать в C # здесь , но я понятия не имею, как сделать такое же побитовое преобразование в Python.Кто-нибудь знает, как это сделать, или есть другой метод для получения того же значения?

(проблема с большим изображением - я пытаюсь численно найти корень уравнения с особенностью x,в пределах 0 < root < x. Решатель (реализация Scipy's toms748) оценивает границы, и он не может обрабатывать значения nan или inf, поэтому я не могу дать ему точно x в качестве границы. Я не знаюнасколько близко корень может быть к границе, поэтому я хочу дать границу, максимально близкую к x, без фактического получения бесконечного значения и сбоя решателя.)

1 Ответ

6 голосов
/ 17 июня 2019

Вы описываете базовое использование numpy.nextafter.

>>> import numpy as np
>>> np.nextafter(1.5, 0.0)  # biggest float smaller than 1.5
1.4999999999999998
>>> np.nextafter(1.5, 2.0)  # smallest float bigger than 1.5
1.5000000000000002
...