以前した質問((バイナリ法を用いた)多項式の累乗計算について)の続きの質問です。

以前の質問で、
「データ型を指定することで、より大きな累乗計算をできる」
ことがわかりました。
それでは、どこまで累乗計算ができるか気になり、次のコードを実行しました。

# -*- coding: cp932 -*-
import numpy

# m次以下のみにする
def mth_degree_poly(p, m):
    return numpy.poly1d(list(p)[- m - 1:])

def power(f, n, m, type):
    p = numpy.poly1d(numpy.array([1], dtype = type))
    for i in format (n, 'b'):
        p *= p
        p = mth_degree_poly(p, m)
        if i == '1':
            p *= f
            p = mth_degree_poly(p, m)
    return p

# int64型
type = numpy.int64
f0 = numpy.poly1d(numpy.array([4, 3, 2, 1], dtype = type))
print list(reversed((power(f0, 20, 20 * 3, type)).c))
print list(reversed((power(f0, 21, 21 * 3, type)).c))
# データ型指定なし
type = None
f1 = numpy.poly1d(numpy.array([4, 3, 2, 1]))
print list(reversed((power(f1, 10, 10 * 3, type)).c))
print list(reversed((power(f1, 11, 11 * 3, type)).c))
# object型
type = numpy.object
f2 = numpy.poly1d(numpy.array([4, 3, 2, 1], dtype = type))
print list(reversed((power(f2, 11, 11 * 3, type)).c))
print list(reversed((power(f2, 12, 12 * 3, type)).c))

その結果、
「上記計算では、データ型が
 int64型だと20乗まで、
 指定なしだと(私の環境では)10乗まで、
 object型だと11乗まで
 しか正確に計算できない」
ことがわかりました。

Numpyでは、
「N > 20 なる整数に対し、
 (1 + 2x + 3x^2 + 4x^3)^N
 の計算はできない」
のでしょうか?
それとも、上記コードでは工夫が足りないということでしょうか?