Hi

how can I calculate 1000!, the data type doesn't fit such s grate number, please help.

best regards
Posted on 2004-04-30 08:28:24 by mistronr1
Get yourself a big-number library, such as MIRACL (MIRACL has an example to do just what you're talking about).
Posted on 2004-04-30 08:32:06 by death
thanx for you reply

where can I find it please.
Posted on 2004-04-30 08:37:59 by mistronr1
http://indigo.ie/~mscott/ - it isn't exactly written for Assembly use, though. But I guess it should be possible.
Posted on 2004-04-30 09:03:43 by f0dder
This thread might help if you want to code it yourself:
http://www.asmcommunity.net/board/index.php?topic=4978&highlight=prime

GMP is located at: http://www.swox.com/gmp/
Posted on 2004-04-30 09:05:17 by bitRAKE
thanx guys I'll take a look & come back if I need more help.
Posted on 2004-04-30 11:17:48 by mistronr1
mistronr1,

Use Stirling's formula. 1000! ~ 4.02353729204+E2567 Ratch

http://www.lassp.cornell.edu/sethna/Cracks/Stirling.html
Posted on 2004-04-30 16:33:53 by Ratch
You can also compute any factorial by adding logarithms.
Example:
log(10!) = log(10)+log(9)+log(8)+..+log(2)+log(1)

you get something like: 6.5597630328767937...
Then 10! = 10^6 * inverse_log(0.5597630328767937) = 3.6288 * 10^6

This trick is useful to compute the number of digits of a factorial, if you need to print using a given shape.
Posted on 2004-05-02 11:33:59 by MCoder
Also there exist the gamma function (aproximations, examples, etc).

http://www.google.com.mx/search?q=gamma+function&ie=UTF-8&oe=UTF-8&hl=es&meta=

http://www.rskey.org/gamma.htm.

I check some of the anterior links posted by bitRAKE, there is the gamma function too. Also in the search, I find the book
http://www.google.com.mx/search?q=cache:T4yZemhawUgJ:http://www.math.sfu.ca/~cbm/aands/+&hl=es follow the link to prohosting, or if you whant one without banners http://www.convertit.com/Go/ConvertIt/Reference/AMS55.ASP





Have a nice day or night.
Posted on 2004-05-02 13:12:24 by rea
Try:
www.sunderlandstrollers.org.uk/bigfact.exe for a windows program to do it and
www.sunderlandstrollers.org.uk/bigfact.txt for the source code.

1000!=402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Posted on 2004-05-03 18:47:41 by pdixon
Stirlings formula looks pretty nice if you don't need an insanely accuracte number... constant-time too, if I'm not mistaken?
Posted on 2004-05-03 19:07:11 by f0dder
Hi
I think the log trick is much better for my needs, coz with the Stirlings formula I still have to compute multiplication of large numbers. my main Problem is store the large number in a variable, I don't have the same Problem if I use log (I guess), I'll try & see what comes out of it.

Thank you
Posted on 2004-05-04 11:56:09 by mistronr1
oops, I accidentaly gave the wrong file name in the post above, it should be:

www.sunderlandstrollers.org.uk/factor3.exe for a windows program to do it and
www.sunderlandstrollers.org.uk/factor3.txt for the source code.

sorry.

The code linked to does the factorial both ways, it gets an estimate of the final value using sum of logs and then works it out completely using multiplies.

Paul.
Posted on 2004-05-04 12:04:44 by pdixon

I think the log trick is much better for my needs,

The problem with the log trick is that it becomes pretty unprecise before too long, because the floating-point numbers don't hold enough precision.

You will need some form of bignum if you want to calculate really big factorials. And in this case, Stirling's formula seems good, at least if your bignum library has a non-retarded exponentation routine :)
Posted on 2004-05-04 12:41:50 by f0dder
if you're using bignums then why not just calculate it directly i.e. 1000 * 999 * 998 * ...

using hugs (haskell interpreter) and typing in "product [1..1000]", the answer comes up instantly
Posted on 2004-05-04 13:07:09 by stormix
Thanx paul for the link & thanx f0dder for the advice I'll try both, after all I am still learning how to use the FPU instructions, so I guess this is a good apportunity for me to do so ;)

thanx again everyone for the help, have a nice day..
Posted on 2004-05-04 13:10:54 by mistronr1
Also I write the real link http://www.math.sfu.ca/~cbm/aands/

Aparently in the day that I find that page, the server was shutdown, because I send a mail, I have not much time for read it, but have some interesting things.
Posted on 2004-05-12 12:39:32 by rea
mistronr1,

Sorry me but, why would you like to calculate 1000! ? Mathematically, it doesn't make much sense.
Posted on 2004-05-12 12:57:08 by Vortex
Could you not use an extended IEEE 754 (80-bit) value to do it, I believe the exponent goes to +1023?
Posted on 2004-05-12 22:29:22 by x86asm
No because the answer is ~ 4.02353729204+E2567
Posted on 2004-05-13 01:14:53 by bitRAKE