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.
Respuestas
¿Demasiados anuncios?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$.
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})$).
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 double
s.