ASKSAGE: Sage Q&A Forum - RSS feedhttps://ask.sagemath.org/questions/Q&A Forum for SageenCopyright Sage, 2010. Some rights reserved under creative commons license.Thu, 03 Sep 2020 07:23:29 +0200How to handle very large numbershttps://ask.sagemath.org/question/53274/how-to-handle-very-large-numbers/I want to play around with factorials. I found that `factorial(10**9)` takes about 20 minutes (on my machine, which is a Mac mini with 8GB Memory). Then I tried `factorial(10**10)` and there I got this:
/Applications/...pathtoSageMath/sage/src/bin/sage-python: line 2: 975 Killed: 9 sage - python "$@"
Then I searched for a SageMath Stirling Formula, which I didn't find (only some related stuff), so I tried it myself:
sage: def s(n):
....: x=sqrt(2*pi*n)*((n/e)**n)
....: return x.numerical_approx()
....:
sage: s(5)
118.019167957590
sage: s(6)
710.078184642185
sage: s(10**10)
This gave me an error after some minutes:
RuntimeError
...
4047 relational_operator(self._gobj))
4048 else:
-> 4049 x = g_pow(self._gobj, nexp._gobj)
4050 return new_Expression_from_GEx(self._parent, x)
4051
RuntimeError: size of exponent exceeds signed long size
Then I tried s(10**9), there I got another error:
python3(755,0x10fbecdc0) malloc: can't allocate region
:*** mach_vm_map(size=18446744073151754240, flags: 100) failed (error code=3)
python3(755,0x10fbecdc0) malloc: *** set a breakpoint in malloc_error_break to debug
sig_error() without sig_on()
------------------------------------------------------------------------
(no backtrace available)
------------------------------------------------------------------------
Unhandled SIGABRT: An abort() occurred.
This probably occurred because a *compiled* module has a bug
in it and is not properly wrapped with sig_on(), sig_off().
Python will now terminate.
So what can I do? Is there a special library for very large reals or int or some special commands for getting an approximation of how many decimals a factorial will have? Could I use the `log` somehow or would this have the same runtime problems?
The reason why I'm asking is that I am rewriting a text which is 20 years old and there's a statement that `factorial(10**100)` could not be computed (ok, I believe that because of factorial being between `O(2**n)` and `O(2**(2**n))`) and `factorial(10**8)` would take many hours, which was not the case on my machine (see above).
And last but not least I would like to know if there is an upper bound for numbers that sage can handle. I thought not, but now I know otherwise ;-)
Also hints to good literature on these topics would be appreciated.
dantetanteThu, 03 Sep 2020 07:23:29 +0200https://ask.sagemath.org/question/53274/