某些数字的阶乘会产生负值

某些数字的阶乘会产生负值

这是我的 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 脚本在计算较大数字的阶乘时通常会中断,但就我在网上挖掘的内容而言,这些负值似乎并不常见。如果有人能解释一下其中的原因,那对我的学习会有很大帮助。谢谢你!

答案1

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!

相关内容