Взглянув на ответ автопопуля, я придумал немного другой ответ:
import math, sys
def incrementFloatValue(value):
if value == 0:
return sys.float_info.min
mant, exponent = math.frexp(value)
epsilonAtValue = math.ldexp(1, exponent - sys.float_info.mant_dig)
return math.fsum([value, epsilonAtValue])
Отказ от ответственности: я действительно не так хорош в математике, как мне кажется;) Пожалуйста, убедитесь, что это правильно, прежде чем использовать его. Также я не уверен насчет производительности
некоторые заметки:
epsilonAtValue
вычисляет, сколько битов используется для мантиссы (максимальный минус, что используется для показателя степени).
- Я не уверен, нужен ли
math.fsum()
, но эй, похоже, не больно.