Here is the code for my bash script to calculate factorials

read -p "Please enter the number " number
while ([ $number -gt 0 ])
   for ((i=$number;i > 0;i--))
       factorial=$((factorial * $i))
   echo "The factorial of the " $number " is " $factorial
   number=$((number - 1))

This prints out the factorial of all the numbers ranging from {input:1} Everything looks right except for the factorial of a few. The output is given below. Output of the code to calculate factorial

As you can see the factorials of certain numbers are negative values. I understand from the online forums that the bash script usually breaks when calculating factorial of bigger numbers but these negative values don't seem to be common as far as I could dig online. If someone could throw some light on the reason for it, it could greatly help me in my learning. Thank you!

  • 3
    Everything looks right, except that the results for values after 20 are wrong — and that should give you a hint as to what’s going on here... Dec 7, 2017 at 14:55

1 Answer 1


bash arithmetic is done over signed 64-bits integers, so the maximum number is:

$ max=$(( (1<<63) - 1 )); echo "$max"
9 223 372 036 854 775 807

If you go over it, you start from the opposite range, that is negative numbers.

$ echo $(( $max + 1 ))
-9 223 372 036 854 775 808

That is exactly as the overflow of integers is managed in the C language.

For factorials, 20! is still below it, but not 21!


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .