Python 2 против Python 3? В случае, если вы используете разные интерпретаторы, возможно, вы просто отсекли часть числа с плавающей запятой с помощью деления. Перепишите каждый делитель в делении на float
.
И поскольку я не вижу никаких l oop, кроме суммы в формуле, я считаю, что вам нужно удалить for
l oop полностью и оставьте только часть fsum(...)
, чтобы сумма и формула оставались неизменными:
def f(x, N):
h = (x / float(N)) + pi / float(2 * N)
p = (-pi / 2.0) + i * h
y = (h / 2.0) * (df(-pi / 2.0) + df(x)) + h * fsum([df(p) for i in range(1, N)])
return y
Как упоминалось в комментариях @jasonharper, l oop в любом случае ничего не делает, так как вы получить только первую итерацию, как в случае моей перезаписи.
math.fsum()
не делает ничего, кроме суммирования значений в стандарте IEEE-754
с плавающей запятой:
>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
0.9999999999999999
>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
1.0
source