Linux

某些數字的階乘產生負值

  • September 29, 2018

這是我的 bash 腳本計算階乘的程式碼

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

這會列印出從 {input:1} 範圍內的所有數字的階乘,除了少數的階乘之外,一切看起來都正確。輸出如下。 計算階乘的程式碼輸出

如您所見,某些數字的階乘是負值。我從線上論壇了解到,在計算較大數字的階乘時,bash 腳本通常會中斷,但這些負值似乎並不常見,因為我可以在網上探勘。如果有人能解釋它的原因,它可以極大地幫助我學習。謝謝!

bash 算術是在有符號的 64 位整數上完成的,所以最大數是:

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

如果你越過它,你就會從相反的範圍開始,那就是負數。

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

這就像在 C 語言中管理整數溢出一樣。

對於階乘,20!仍然低於它,但不是21!

引用自:https://unix.stackexchange.com/questions/409491