31 votos

Es allí una manera de encontrar el registro de números muy grandes?

Me gustaría evaluar $\log_2{256!}$ o en grandes números para encontrar "bits" de información. Por ejemplo, yo tendría tres bits de información que representan los siete días de la semana desde $\lceil \log_2{7}\rceil = 3$, pero mi calculadora devuelve un error de los grandes números.

118voto

John Coleman Puntos 121

Por las leyes de los logaritmos

$$ \log_2(256!) = \sum_{i=1}^{256} \log_2(i)$$

Esto es fácilmente evaluados (aunque no en todas las calculadoras).

En Python:

>>> sum(math.log2(i) for i in range(1,257))
1683.9962872242136

65voto

Kim Peek II Puntos 758

Si se trata de factoriales, usted puede usar la aproximación de Stirling:

$$\ln(N!) \approx N\ln(N) - N$$

Debido al hecho de que

$$N! \approx \sqrt{2\pi N}\ N^N\ e^{-N}$$

Error De Enlazado

Escrito el "todo" de Stirling, como la serie de

$$\ln(n!)\approx n\ln(n)−n+\frac{1}{2}\ln(2\pi n)+\frac{1}{12n} −\frac{1}{360n^3}+\frac{1}{1260n^5}+\ldots $$

se sabe que el error de truncamiento de la serie es siempre el signo opuesto y en la mayoría de la misma magnitud que la primera omitido plazo. Debido a Robbins, podemos obligado:

$$\sqrt{2\pi }n^{n+1/2}e^{-n} e^{\frac{1}{12n+1}} < n! < \sqrt{2\pi }n^{n+1/2} e^{−n} e^{1/12n}$$

Más en Stirling de la Serie en Base a $2$

Vamos a desarrollar la cuestión de Stirling de la serie cuando tenemos una base de $2$ por ejemplo. La anterior aproximación se tiene que leer de esta manera:

$$log_2(N!) \approx \log_2(\sqrt{2\pi N} N^N\ e^{-N})$$

Debido al hecho de que tenemos un no-natural de registro, se convierte en

$$\log_2(N!) \approx \frac{1}{2}\log_2(2\pi N) + N\log_2(N) - N\log_2(e)$$

Por lo tanto, uno tiene que ser muy cuidadoso con el último término que no es $N$,$N\log_2(e)$.

Dicho esto, uno puede continuar con el resto de Stirling de la serie.

Ver los comentarios de los resultados numéricos.

La Belleza Informe

$$\color{red}{256\log_2(256) - 256\log_2(e) + \frac{1}{2}\log_2(2\pi\cdot 256) = 1683.9958175971615}$$

un muy buen acuerdo con la evaluación numérica (por ejemplo W. Mathematica), que ofrece a $\log_2(256!) = 1683.9962872242145$.

11voto

Kendall Puntos 768

Solo un comentario:

Por supuesto, hay muchas calculadoras que pueden manejar $\log_2 256!$ y mucho "peor" expresiones directamente. Por ejemplo PARI/GP, si el tipo de

log(256!)/log(2)

obtendrá un resultado como:

%1 = 1683.9962872242146194061476793149931595

(el número de dígitos puede ser configurado con el valor predeterminado llamado realprecision).

Si desea una exacta entero logaritmo, también puede utilizar logint(256!, 2) , el cual le dará 1683.

Escribir 256! a solas le dará el total de 507 dígito decimal expansión de esta entero.

Si PARI/GP es permitido el uso de la memoria (set parisizemax de forma predeterminada), también inmediatamente decir que logint(654321!, 2) es 11697270.


Como se señaló en el comentario, con referencia a la respuesta de Carlos, si quieres trabajar con las operaciones de punto flotante (y no es enorme exacta de números enteros), usted puede usar la función lngamma que es igual a $\log\circ\Gamma$ de positivos verdaderos argumentos. Recuerde que en comparación con el factorial, la función Gamma es cambiado por uno. Así $$\log_2 n! = \frac{\log n!}{\log 2} = \frac{\log \Gamma(n+1)}{\log 2}$$ y usted puede escribir lngamma(654321 + 1)/log(2) en PARI/GP y todo será operaciones de punto flotante. Esto funcionará para astronómico valores de $n$, por ejemplo lngamma(3.14e1000) está bien ($\log\Gamma(3.14\cdot 10^{1000})$).

6voto

Adam Kahtava Puntos 383

Como otros han mencionado, su ejemplo es lo suficientemente pequeño como para ser calculada directamente con muchos de los sistemas. Debo mencionar que muchos de los sistemas de aplicación de $$ \log\Gamma(x) $$ generalmente con nombres como lngamma o lgamma. Usted puede entonces calcular $$ \log_2(256!)=\frac{\log\Gamma(257)}{\log 2} $$ con un mínimo de dificultad (y sin dejar de doble precisión).

En general un poco de cuidado es necesario para trabajar con la función gamma (cortes de ramas y análisis numérico), pero en su caso siempre y cuando se apegue a los factoriales de los números de 1 a 10305 o así que debe ser muy bien con 64-bit doubles.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X