Python, работающий с большими числами, вызывает ошибки на полях
Приветствие ребят.
Я выполнял алгоритм, предназначенный для получения числа разделов целого числа. Когда я тестировал свою программу, ошибки маржи начали появляться, когда n> 257. У меня фактически была та же самая проблема по другому вопросу, работая с факториалами, но мои мысли были о самом алгоритме, имеющем некоторые недостатки. Я знаю, что в python 3.5.x действительно нет ограничений на размер номера.
Я даже пытался сделать сумму по-старомодно с каждой суммой:
from decimal import Decimal
но это не изменило результат (добавлено только более длительное время вычислений).
#! /usr/bin/python3.5
from unittest import TestCase as Test
def number_partition(n):
"""
Building the 'Euler' triangle such as
n
p(n,j) = sum p(n-j,i)
i=j
"""
if n < 0: return 0
if n is 0: return 1
p = []
for i in range(n):
p.append([])
for j in range(i+1):
if j is i: p[i].append(1) ; break
p[i].append(sum(p[i-j-1][j:]))
return sum(p[n-1])
if __name__ == '__main__':
# number_partition(257)
Test.assertEqual(Test(), number_partition(257), 394723676655357) # Pass
Test.assertEqual(Test(), number_partition(258), 425933084409356) # returns 425933084409355
Test.assertEqual(Test(), number_partition(259), 459545750448675) # returns 459545750448673
Так что алгоритм ошибочен, или есть функциональность Python, которую я не получил?
Заранее спасибо за ваше время.