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, которую я не получил?

Заранее спасибо за ваше время.

0 ответов

Другие вопросы по тегам