Escriba una función o un programa completo que tome un número positivo n
y realice los n
pasos de un algoritmo iterativo para calcular π que tiene convergencia cuadrática (es decir, aproximadamente duplica el número de dígitos exactos en cada iteración) y luego devuelve o imprime 2 n dígitos correctos (incluyendo el principio 3). Uno de estos algoritmos es el algoritmo Gauss-Legendre , pero puede utilizar un algoritmo diferente si lo prefiere.
Ejemplos:
entrada 1
→ salida 3.1
entrada 2
→ salida 3.141
entrada 5
→ salida3.1415926535897932384626433832795
Requisitos:
- Cada iteración del algoritmo debe realizar un número constante de operaciones básicas tales como suma, resta, multiplicación, división, potencia y raíz (con exponente / grado entero): cada operación de este tipo en números enteros / decimales "grandes" se cuenta como uno incluso si involucra uno o más bucles internamente. Para ser claros, las funciones trigonométricas y las potencias que involucran números complejos no son operaciones básicas.
- Se espera que el algoritmo tenga un paso de inicialización que también debe tener un número constante de operaciones.
- Si el algoritmo necesita 1 o 2 iteraciones más para llegar a 2 n dígitos correctos, puede realizar hasta
n+2
iteraciones en lugar de solon
. - Si no fue lo suficientemente claro, después de los 2 n dígitos correctos , su programa no debe imprimir nada más (como dígitos más correctos, dígitos incorrectos o los trabajos completos de Shakespeare).
- Su programa debe admitir valores de
n
1 a al menos 20. - Su programa no debería tomar más de una hora por
n
= 20 en una computadora moderna (no es una regla difícil, pero trate de mantenerlo razonable). - El programa no debe obtener más de 20 dígitos exactos después de la inicialización y la primera iteración del algoritmo.
- El programa debe ser ejecutable en Linux utilizando software disponible gratuitamente.
- El código fuente debe usar solo caracteres ASCII.
Puntuación:
Código de golf sencillo, el código más corto gana.
Ganador:
El ganador es Digital Trauma, finalmente terminé de ejecutar su código en n = 20 (es broma). Premio especial para primo por su solución Python muy rápida y algoritmo diferente :)
~q^(n^2)
acuerdo con la primera sección allí y de ~q^2
acuerdo con la segunda sección allí.