Fatorial de certos números geram valores negativos

0

Aqui está o código para o meu script bash para calcular fatoriais

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

Isso imprime o fatorial de todos os números que variam de {input: 1} Tudo parece certo, exceto pelo fatorial de alguns. A saída é dada abaixo.

Como você pode ver, os fatoriais de certos números são valores negativos. Eu entendo dos fóruns on-line que o script bash geralmente quebra ao calcular o fatorial de números maiores, mas esses valores negativos não parecem ser tão comuns quanto eu poderia pesquisar on-line. Se alguém pudesse lançar alguma luz sobre o motivo, isso poderia me ajudar muito no meu aprendizado. Obrigada!

    
por Ammu 07.12.2017 / 15:53

1 resposta

7

A aritmética de bash é feita sobre inteiros de 64 bits assinados, então o número máximo é:

$ max=$(( (1<<63) - 1 )); echo "$max"
9 223 372 036 854 775 807

Se você passar por cima, você começa do lado oposto, isso é números negativos.

$ echo $(( $max + 1 ))
-9 223 372 036 854 775 808

Isso é exatamente como o estouro de inteiros é gerenciado na linguagem C.

Para fatorials, 20! ainda está abaixo, mas não 21!

    
por 07.12.2017 / 15:58