整数精度が最も重要でない場合は、しかし、より大きな値のためのものはすぐに限界に達するだろうfloat
番号
>>> 3**3**3
7625597484987
>>> 3.**3.**3.
7625597484987.0
を使用することができます。
>>> 5.**5.**5.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Numerical result out of range')
あなたがしてはるかに高く得ることができますdecimal
:
>>> import decimal
>>> d = decimal.Decimal
>>> d(5)**d(5)**d(5)
Decimal('1.911012597945477520356404560E+2184')
>>> d(10)**d(10)**d(8)
Decimal('1.000000000000000000000000000E+100000000')
デフォルトでは、さえものが10**10**10
を表すことができない。
>>> d(10)**d(10)**d(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/decimal.py", line 2386, in __pow__
ans = ans._fix(context)
File "/usr/lib/python2.7/decimal.py", line 1676, in _fix
ans = context._raise_error(Overflow, 'above Emax', self._sign)
File "/usr/lib/python2.7/decimal.py", line 3872, in _raise_error
raise error(explanation)
decimal.Overflow: above Emax
しかし、これらの制限は固定されていません。getcontext()
を使用すると、あなたが望むようにそれらが同じ大きさにすることができます。
>>> decimal.getcontext().Emax = 1000000000000
>>> d(10)**d(10)**d(10)
Decimal('1.000000000000000000000000000E+10000000000')
をしかし、これらの数字は、最後の桁に100%正確ではないことを覚えておいてください(お使いのコンピュータは、おそらく店各桁に十分なメモリを持っていません)
>>> d(10)**d(10)**d(10) == d(10)**d(10)**d(10) + 1000000
True
正の整数Xを格納すると、O(log(X))のスペースが必要になります。したがって、X = N ^(N^N)ならば、O((N^N)log N)個の空間が必要になります。 –