Linux
某些數字的階乘產生負值
這是我的 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!