python точность умножения - PullRequest
       7

python точность умножения

1 голос
/ 25 апреля 2020

Я пытаюсь что-то относительно простое в python3

fx = 2400/5.52
ifx = 1/fx

124*ifx*fx

дает 124.00000000000001

Это создает реальную проблему, выше умножается на -1 и наполняется

Я также пытался использовать numpy float, но получил тот же результат (BTW, ответ выше не является оператором печати, просто exe c в python3 shell)

Спасибо

1 Ответ

0 голосов
/ 25 апреля 2020

Вам нужно написать функцию, которая будет возвращать ближайшее целое число, а не 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...