Вам нужно написать функцию, которая будет возвращать ближайшее целое число, а не ceil или floor. Вот что я использую для проблем такого типа:
def proper_integer(x):
"""Function used to make sure that 1.0/1.0 = int(1), not float(1.0000000000000001)."""
distances = []
for n in (-2, -1, 0, +1, +2):
xi = int(np.floor(x)) + n
d = abs(x-xi)
distances.append((d, n))
n_closest = min(distances)[1] # The n that corresponds to the min d.
return int(np.floor(x)) + n_closest
По существу, оно округляет число вниз, используя np.floor(x)
, и проверяет, приближает ли результат добавление небольшого целого числа от -2 до +2 к тому, что вы ожидаете.
В вашем случае proper_integer(124*ifx*fx)
должно возвращать ровно 124
.