11 votos

¿Existe una forma de calcular potencias extremadamente altas?

¿Podría ser posible calcular, digamos, $2^{250000}$, lo cual obviamente tendría que escribirse en notación estándar? Parece imposible hacerlo sin ejecutar un programa en una supercomputadora para resolverlo.

7 votos

No necesitas una supercomputadora, una computadora de escritorio o portátil no demasiado antigua puede manejar eso fácilmente. Si quieres hacerlo manualmente, tomará un tiempo, especialmente la verificación de errores de cálculo.

11 votos

En cualquier computadora Unix, prueba echo '2^250000' |bc. Mi portátil de 3 años lo ejecutó en 0.64 segundos. Esto no es en absoluto una potencia "absurdamente alta".

5 votos

En mi teléfono, calcular $2^{2500000}$ toma un poco menos de 2 segundos.

26voto

Dave Griffiths Puntos 688

La idea básica es la siguiente: Si $k \in \mathbf N$ es par, digamos $k = 2m$, entonces tenemos $$ 2^k = 2^m \cdot 2^m $$ si $k = 2m + 1$ es impar, entonces $$ 2^k = 2^{2m} \cdot 2 $$ Es decir, necesitamos dos rutinas, una para elevar al cuadrado un número y otra para duplicar un número (en notación estándar). Esto se puede hacer en casi todas las computadoras. Ahora comenzamos con 2, realizando los pasos \begin{align*} 2 &\leadsto 2^2 \text{ cuadruplicar}\\ &\leadsto 2^3 \text{ duplicar}\\ &\leadsto 2^6 \text{ cuadruplicar}\\ &\leadsto 2^7 \text{ duplicar}\\ &\leadsto 2^{14} \text{ cuadruplicar}\\ &\leadsto 2^{15} \text{ duplicar}\\ &\leadsto 2^{30} \text{ cuadruplicar}\\ &\leadsto 2^{60} \text{ cuadruplicar}\\ &\leadsto 2^{61} \text{ duplicar}\\ &\leadsto 2^{122} \text{ cuadruplicar}\\ &\leadsto 2^{244} \text{ cuadruplicar}\\ &\leadsto 2^{488} \text{ cuadruplicar}\\ &\leadsto 2^{976} \text{ cuadruplicar}\\ &\leadsto 2^{1952} \text{ cuadruplicar}\\ &\leadsto 2^{1953} \text{ duplicar}\\ &\leadsto 2^{3906} \text{ cuadruplicar}\\ &\leadsto 2^{7812} \text{ cuadruplicar}\\ &\leadsto 2^{15624} \text{ cuadruplicar}\\ &\leadsto 2^{15625} \text{ duplicar}\\ &\leadsto 2^{31250} \text{ cuadruplicar}\\ &\leadsto 2^{62500} \text{ cuadruplicar}\\ &\leadsto 2^{125000} \text{ cuadruplicar}\\ &\leadsto 2^{250000} \text{ cuadruplicar}\\ \end{align*} Es decir, esto se puede hacer en "no tantas" multiplicaciones.

2 votos

Es mejor hacer estos cálculos en una representación en base 10, de lo contrario se puede hacer de una manera un poco más fácil ;)

8 votos

¡Lo hermoso de esto es que puedo mirar tu respuesta y decirte la representación binaria de 250000 desde aquí!

2 votos

Curiosidad divertida: encontrar la forma óptima de elevar al cuadrado y multiplicar para obtener la respuesta es un problema NP-completo (creo que he leído esto en TAOCP). Sin embargo, incluso el esquema ingenuo suele realizar muy pocas multiplicaciones o elevaciones al cuadrado más de lo óptimo, así que...

21voto

Emilio Novati Puntos 15832

Cuando era joven (no hace tantos años), no había computadoras en casa y me enseñaron a hacer ese tipo de cálculos utilizando la ''tabla de logaritmos'', un pequeño libro en el que era posible encontrar los logaritmos (en base $10$) de los números.

¡Así era como se hacían los cálculos antes de las computadoras! ¡Y aún funciona hoy en día!

Entonces, para tu cálculo podemos hacer lo siguiente:

$$ \log_{10}\left(2^{250000}\right)=250000 \times \log_{10} 2 $$

De mis tablas encontré que $\log_{10} 2=0.3010299$ (claramente, el problema es la precisión que está limitada por el número de dígitos en las tablas, pero para este propósito $7$ dígitos parecen ser suficientes).

Entonces, con una simple multiplicación tenemos:

$$ 2^{250000} \approx 10^{75257.475}=\left(10^{10000}\right)^{7.5257475} $$ O, como sugiere @mathmandan (¡gracias!): $$ 2^{250000} \approx 10^{75257.475}=10^{75257}\times 10^{0.475} $$ y mis ''tablas mágicas'' dicen que $10^{0.475}\approx 2.9853826$.

0 votos

Sí. También una bonita anécdota con tablas de logaritmos. De hecho, una vez encontré un libro así en una biblioteca.

1 votos

Um, $75257.475\not=10000+7.525475$.... Se debe traducir a: ¡Um, $75257.475\not=10000+7.525475$....

0 votos

¡Whaw! ¡Qué error tan estúpido!

8voto

J. Bush Puntos 439

Se pueden obtener aproximaciones bastante buenas, pero el cálculo real es difícil. Por ejemplo $$2^{250000} = (2^{10})^{25000} = (1024)^{25000} \approx (10^3)^{25000} \approx 10^{75000}$$ Lo cual puedes escribir bastante fácilmente. Esta es una estimación bastante decente (Wolfram da $10^{75257.49891599528}$) También podrías escribir el número en binario si eso te conviene, que es un $1$ seguido de $250000$ $0$'s.

0 votos

Utilizando que $\log_{10}2 \approx 0.30103$, obtenemos $2^{250000} \approx 10^{75257.5}$. Utilizando una mejor aproximación para $\log_{10}2$ obtenemos lo que WA dio.

4voto

En cuanto a números grandes, 2^250000 es en realidad pequeño. Un programa simple en Ruby lo calcula en unos pocos décimas de segundo:

puts 2**250000

Ejecútalo con ruby -e en una línea de comandos, si tienes Ruby. Tarda más tiempo en mostrar el resultado que en calcularlo.

Para números realmente grandes, por favor visita

2 votos

Como van los números grandes, cualquier número dado es pequeño.

1 votos

@AsafKaragila: ¿Es A(g64, g64) pequeño? A = función de Acermann, g64 = número de Graham.

1 votos

@Joshua: El número XKCD es solo grande en comparación con finitos enteros, pero es pequeño en comparación con infinitos. Como dice el viejo refrán, la mayoría de los números son más grandes.

3voto

mathreadler Puntos 3517

Sí. Logaritmo y multiplicación. Utilice la ley del logaritmo $$\log(a^b) = b\log(a)$$ y su exponenciación será $$\exp(b\log(a))$$

0 votos

Preferiblemente usarías una base que sea la que desees para escribir la respuesta en.

4 votos

Ver la respuesta de Emilio con tablas de logaritmos y base 10. Tiene mejores explicaciones que las mías.

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