특정 숫자의 계승은 음수 값을 생성합니다.

특정 숫자의 계승은 음수 값을 생성합니다.

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

관련 정보