Scrivi una funzione o un programma completo che accetta un numero positivo n
ed esegue i n
passaggi di un algoritmo iterativo per il calcolo di π con convergenza quadratica (cioè raddoppia approssimativamente il numero di cifre accurate ad ogni iterazione), quindi restituisce o stampa 2 n cifre corrette (tra cui l'inizio 3). Uno di questi algoritmi è l'algoritmo Gauss – Legendre , ma se preferisci sei libero di usare un algoritmo diverso.
Esempi:
input 1
→ input 3.1
input 2
→ output 3.141
input 5
→ output3.1415926535897932384626433832795
Requisiti:
- Ogni iterazione dell'algoritmo deve eseguire un numero costante di operazioni di base come addizione, sottrazione, moltiplicazione, divisione, potenza e radice (con esponente / grado intero) - ciascuna di queste operazioni su numeri interi / decimali "grandi" viene conteggiata come una pari se coinvolge uno o più loop internamente. Per essere chiari, funzioni trigonometriche e poteri che coinvolgono numeri complessi non sono operazioni di base.
- Si prevede che l'algoritmo abbia una fase di inizializzazione che deve avere anche un numero costante di operazioni.
- Se l'algoritmo necessita di 1 o 2 più iterazioni per arrivare a 2 n cifre corrette, è possibile eseguire fino a
n+2
iterazioni anziché solon
. - Se non fosse abbastanza chiaro, dopo le 2 n cifre corrette , il tuo programma non deve stampare nient'altro (come cifre più corrette, cifre errate o le opere complete di Shakespeare).
- Il tuo programma deve supportare valori compresi
n
tra 1 e almeno 20. - Il tuo programma non dovrebbe richiedere più di un'ora per
n
= 20 su un computer moderno (non è una regola difficile, ma cerca di mantenerlo ragionevole). - Il programma non deve ottenere più di 20 cifre accurate dopo l'inizializzazione e la prima iterazione dell'algoritmo.
- Il programma deve essere eseguibile su Linux utilizzando software disponibile gratuitamente.
- Il codice sorgente deve usare solo caratteri ASCII.
punteggio:
Semplice codice golf, il codice più corto vince.
Vincitore:
Il vincitore è Digital Trauma, ho finalmente finito di eseguire il suo codice su n = 20 (sto scherzando). Il premio speciale va al primo per la sua soluzione python molto veloce e il suo algoritmo diverso :)
~q^(n^2)
secondo la prima sezione lì e ~q^2
secondo la seconda sezione lì.