이것은 계승을 계산하는 내 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!