これは階乗を計算する私の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!