Fatoria 10^15

13 respostas
sidcazi

Alguém sabe como efetuar o cálculo de fatorial de 10^15 ou seja 1 quatrilhão

13 Respostas

edmarr

Poderia explicar melhor ?

edipokbelo

Quer saber como faz isso em java?

sergiotaborda

Utilize BigInteger no lugar de integer ou long no algoritmo padrão para factorial.

E

Não adianta usar BigInteger, porque o número resultante irá ser grande demais para caber na memória do computador.

Para calcular o fatorial de 10 elevado a 15, você pode usar uma fórmula fechada para o fatorial:

n! = gamma (n + 1)

Onde a função gamma pode ser obtida por uma série de potências.

Entretanto, o gamma de (10 elevado a 15 - 1) ainda é um número absurdo. Portanto, tradicionalmente calcula-se o logaritmo de gamma, e então a partir desse logaritmo obtém-se o número.

Em algum lugar você pode obter uma fórmula para calcular lngamma (esse é o nome tradicional desse método). Em http://www.wolframalpha.com eu consegui o valor de 3.353877639491070344859660248028091836261550220111412484349189019864987776782664049865578213930432314620105991… x 10^16
Ou seja, o logaritmo decimal do fatorial de 10 elevado a 15 é:

1.456570551809675607143880526014095589141601977287792123789622552066011337860639386892579938458631026120407402… x 10^16
Ou seja,
1.456570551809675607143880526014095589141601977287792123789622552066011337860639386892579938458631026120407402… x 10^16

14565705518096756 + 0.07143880526014139018589792302492271960776676818433279953615455120063589445985010851898655798

Ou seja, o fatorial de 10 elevado a 15 é
1.1787964119409006574031242336405180990631499035923776521531387239523642146128136963850208230647754957 x 10 ^ 14565705518096756.

Logo se vê que um BigDecimal não seria suficiente para conter o fatorial do número 10 elevado a 15.

OK?

E

Dica número 2: não adianta usar perguntar "1000000000000000! " ao Wolfram Alpha. Eu tentei isso primeiro, mas ele simplesmente se recusou a responder. Tive de fazer esses passos para obter a resposta.

E
sergiotaborda

enantiomero:
Não adianta usar BigInteger, porque o número resultante irá ser grande demais para caber na memória do computador.

(…)

Ou seja, o fatorial de 10 elevado a 15 é
1.1787964119409006574031242336405180990631499035923776521531387239523642146128136963850208230647754957 x 10 ^ 14565705518096756.

Logo se vê que um BigDecimal não seria suficiente para conter o fatorial do número 10 elevado a 15.

Não cabe na memória do computador… Como vc calculou esse numero acima ?

E

Sergião, basta você acompanhar o post completo. Por favor, corrija uns cálculos que fiz errados, porque eu deveria ter usado gamma (1000000000001), não gamma (999999999999). Eu corrigi algumas coisas mas não tudo; você vai ver que o expoente do número calculado está certo, mas a mantissa não está certa a partir da 10a. casa mais ou menos.

E

De qualquer maneira, mesmo sem saber todas essas fórmulas, eu poderia ter uma idéia grosseira do tamanho do número pensando assim:

10^15 ! = 1 * 2 * … * (10^15 - 1) * 10^15 é menor que (10^15) elevado a (10^15).
O número de dígitos decimais de (10^15) elevado a (10^15) é 15 * (10 ^15) + 1.
Mas eu sei que um computador típico tem no máximo 10 Gb (10 ^10 bytes) de memória RAM, e cada dígito decimal requer meio byte para ser representado. Ou seja, eu precisaria de 1.500.000 computadores de 10Gb de memória cada um, só para conter o tal número.

Portanto, eu não posso tentar calcular diretamente o número, porque eu não teria nem memória (nem disco suficientes). Não sou o Google para ter 15 quatrilhões de bytes de disco.

sidcazi

é galera este cálculo é fóda…tem alguma maneira de quebrar o numero em tres partes ou mais?

sidcazi

Pessoal que está perdido, o cálculo de fatoria é n! certo
mas o que eu quero é 10^15!
Esta resposta é para quem não está entendendo ok,
Valw pela dica estou tentando efetuar o cálculo em liguagem de progrmação vlw msmo pela força

ENANTIOMERO

E

Dica número 3: tentei implementar as fórmulas que estão naquele artigo da Wikipedia que lhe mostrei (Fórmula de Stirling). Só que, devido à precisão do “double” (15 dígitos significativos), eu obtive um resultado um pouco inconclusivo:

1,000000 x 10 ^ 14565705518096754

Que não é bem o que eu mostrei. É necessário usar alguma outra coisa que calcule adequadamente o logaritmo para você com precisão maior. (Atenção: BigDecimal não tem o logaritmo pronto; você precisa achar alguma implementação de logaritmos para BigDecimal.

E

Ou seja, essa lição de casa é bem sacana e pede bastante pesquisa. Como você viu, implementar em linguagem de programação (mesmo conhecendo as fórmulas) precisa de um pouco de cuidado.

  • Pelo menos você já sabe onde chegar :stuck_out_tongue:
Criado 10 de setembro de 2009
Ultima resposta 11 de set. de 2009
Respostas 13
Participantes 5