Number of Digits in n!: Coding a Program for 500! Factorial

  • Thread starter Thread starter Gagan A
  • Start date Start date
Click For Summary

Discussion Overview

The discussion revolves around calculating the number of digits in the factorial of 500 (500!) using various programming approaches and tools. Participants explore methods for computing factorials, the precision of different programming languages, and the discrepancies in results obtained from different calculations.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant proposes using a for loop to calculate log(n!) as the sum of log values from 1 to n, suggesting that the number of digits can be derived from this sum.
  • Another participant confirms the calculation of 1135 digits for 500! using their own method.
  • A participant shares the complete value of 500! and states it has 1135 digits, adding credibility to the claim.
  • Some participants discuss the use of Mathematica for calculating 500! and mention its arbitrary-precision arithmetic capabilities, which allow for high precision in calculations.
  • One participant suggests that rounding errors in the initial program may have led to an incorrect result of 1133 digits.
  • Another participant mentions using Smalltalk for similar calculations, noting its ability to handle arbitrary-precision arithmetic, albeit with slower performance.
  • A suggestion is made to consider Stirling's series for calculating the log of gamma as an alternative method to find the number of digits without summation.
  • A Python example is provided that demonstrates the calculation of 500! and confirms the number of digits as 1135.

Areas of Agreement / Disagreement

Participants generally agree that the number of digits in 500! is 1135, but there is disagreement regarding the methods used to arrive at this conclusion and the potential for errors in calculations.

Contextual Notes

Some participants mention limitations related to the precision of calculators and programming languages, as well as the potential for rounding errors in calculations. The discussion does not resolve these issues.

Who May Find This Useful

This discussion may be useful for programmers, mathematicians, and students interested in computational methods for large numbers, factorial calculations, and the implications of precision in programming.

Gagan A
Messages
19
Reaction score
0
I have to code a program in C that will give the correct number of digits of n! where n is upto 500.
I thought this way:
Get the value of log(n!) by using a for loop. (like log1 + log2 + log3... upto logn, log is to the base 10). Now the final answer will be (int)sum + 1. If I give 500! factorial the answer comes out to be 1135 acc. to my program, but the answer given is 1133. Am I right?
 
Technology news on Phys.org
I also get 1135.
 
500! =

Code:
122013682599111006870123878542304692625357434280319284219241358838584537315388\
199760549644750220328186301361647714820358416337872207817720048078520515932928\
547790757193933060377296085908627042917454788242491272634430567017327076946106\
280231045264421887878946575477714986349436778103764427403382736539747138647787\
849543848959553753799042324106127132698432774571554630997720278101456108118837\
370953101635632443298702956389662891165897476957208792692887128178007026517450\
776841071962439039432253642260523494585012991857150124870696156814162535905669\
342381300885624924689156412677565448188650659384795177536089400574523894033579\
847636394490531306232374906644504882466507594673586207463792518420045936969298\
102226397195259719094521782333175693458150855233282076282002340262690789834245\
171200620771464097945611612762914595123722991334016955236385094288559201872743\
379517301458635757082835578015873543276888868012039988238470215146760544540766\
353598417443048012893831389688163948746965881750450692636533817505547812864000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
0000000000000000000000000000000000000000000

This has 1135 digits.

- Warren
 
I too verified with the teacher, the answer is 1135. But how in heaven did you calculate the value of 500!, chroot? What is the maximum precision of the calculator you used?
 
Gagan A said:
I too verified with the teacher, the answer is 1135. But how in heaven did you calculate the value of 500!, chroot? What is the maximum precision of the calculator you used?
I think he used Methematica. It can handle most mathematical operations quite well.
It can give you the evaluation of 500!, say, in less than 1 second. :rolleyes:
------------------
The reason you got the wrong answer may be the rounding errors of the programme.
 
Gagan A,

I did indeed use Mathematica (VietDao29 probably recognized the tell-tale "\" characters at the end of each line in my output).

It uses arbitrary-precision arithmetic, so the maximum precision is that afforded by the entire memory of my computer (2 GB on this one). 500! is computed, indeed, in the blink of an eye, and probably only uses a few kilobytes of memory.

- Warren
 
Yes Mathemathica really wotks great for calculations like this. But there are other good way's of doing it as well. I have in the past also did stuff like this with the Smalltalk programming language (it isn't very good for doing mathemathics but it does enable arbitrary-precision arithmetic) which was also qouit fast. I once also made a programm in C that could work with large integers (it used strings) but it wasn't veary fast.
 
It may be 'cheating' within the context of your course (if they want you to do this a certain way), but you might want to look up Stirling's series. You can calculate the log of gamma (and hence the factorial) to the necessary accuracy to find the number of digits without resorting to a summation.
 
Python also supports arbitrary length integers:
Code:
>>> def fac(a):
    if a==1: return a
    return a * fac(a-1)
>>> len( str( fac( 500)))
1135
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
23K
Replies
11
Views
2K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
14
Views
4K
  • · Replies 97 ·
4
Replies
97
Views
10K
Replies
47
Views
6K
  • · Replies 3 ·
Replies
3
Views
2K