Come faccio a determinare se il mio calcolo di pi è accurato?


772

Stavo provando vari metodi per implementare un programma che fornisse le cifre di pi in sequenza. Ho provato il metodo della serie Taylor , ma ha dimostrato di convergere molto lentamente (quando ho confrontato il mio risultato con i valori online dopo qualche tempo). Comunque, sto provando algoritmi migliori.

Quindi, mentre scrivevo il programma, mi sono bloccato su un problema, come con tutti gli algoritmi: come faccio a sapere che le ncifre che ho calcolato sono accurate?


20
più di un problema matematico. buoni algoritmi forniscono anche una stima dell'errore.
esempio

35
Confronta con pi?
Dave Newton,

55
@chris: "Letteralmente ovunque"?
Razze di leggerezza in orbita l'

32
Posso verificare fino a 3.141592653589793238462643383279502, oltre a ciò, perché hai bisogno di un numero così elevato di cifre? (È qualcosa come l'accuratezza del livello atomico con un cerchio delle dimensioni dell'universo.)
AJ Henderson

65
Perché non dividi semplicemente per pi e controlli se il risultato è 1? (
sto

Risposte:


1629

Dato che sono l'attuale detentore del record mondiale per il maggior numero di cifre di pi, aggiungerò i miei due centesimi :

A meno che tu non stia effettivamente stabilendo un nuovo record mondiale, la pratica comune è solo quella di verificare le cifre calcolate rispetto ai valori noti. Quindi è abbastanza semplice.

In effetti, ho una pagina web che elenca frammenti di cifre allo scopo di verificare i calcoli contro di loro: http://www.numberworld.org/digits/Pi/


Ma quando entri in un territorio da record mondiale, non c'è nulla da confrontare.

Storicamente, l'approccio standard per verificare che le cifre calcolate siano corrette è quello di ricalcolare le cifre utilizzando un secondo algoritmo. Quindi, se uno dei due calcoli non va a buon fine, le cifre alla fine non corrisponderanno.

Questo di solito fa più del doppio del tempo necessario (poiché il secondo algoritmo è generalmente più lento). Ma è l'unico modo per verificare le cifre calcolate una volta che hai vagato nel territorio inesplorato di cifre mai calcolate prima e un nuovo record mondiale.


Ai tempi in cui i supercomputer stavano stabilendo i record, venivano comunemente usati due diversi algoritmi AGM :

Questi sono entrambi O(N log(N)^2)algoritmi che erano abbastanza facili da implementare.

Tuttavia, al giorno d'oggi, le cose sono un po 'diverse. Negli ultimi tre record del mondo, invece di eseguire due calcoli, abbiamo eseguito un solo calcolo usando la formula più veloce conosciuta (formula di Chudnovsky ):

Inserisci qui la descrizione dell'immagine

Questo algoritmo è molto più difficile da implementare, ma è molto più veloce degli algoritmi AGM.

Quindi verifichiamo le cifre binarie utilizzando le formule BBP per l'estrazione delle cifre .

Inserisci qui la descrizione dell'immagine

Questa formula consente di calcolare cifre binarie arbitrarie senza calcolare tutte le cifre precedenti. Quindi viene utilizzato per verificare le ultime cifre binarie calcolate. Pertanto è molto più veloce di un calcolo completo.

Il vantaggio di questo è:

  1. È necessario solo un calcolo costoso.

Lo svantaggio è:

  1. È necessaria un'implementazione della formula Bailey – Borwein – Plouffe (BBP).
  2. È necessario un passaggio aggiuntivo per verificare la conversione radix da binario a decimale.

Ho esaminato alcuni dettagli del perché la verifica delle ultime cifre implica che tutte le cifre sono corrette. Ma è facile vederlo poiché qualsiasi errore di calcolo si propagherà alle ultime cifre.


Ora quest'ultimo passaggio (verifica della conversione) è in realtà abbastanza importante. Uno dei precedenti detentori del record del mondo ci ha effettivamente invitato a questo perché, inizialmente, non ho fornito una descrizione sufficiente di come ha funzionato.

Quindi ho estratto questo frammento dal mio blog:

N = # of decimal digits desired
p = 64-bit prime number

Inserisci qui la descrizione dell'immagine

Calcola A usando l'aritmetica di base 10 e B usando l'aritmetica binaria.

Inserisci qui la descrizione dell'immagine

Se A = B, quindi con "probabilità estremamente elevata", la conversione è corretta.


Per ulteriori informazioni, vedere il mio post sul blog Pi - 5 Trilioni di cifre .


15
E per rispondere all'altra domanda su come sapere quando un algoritmo specifico è converto in N cifre: questo richiede che tu conosca il comportamento di convergenza dell'algoritmo. La serie Taylor di ArcTan(1)sta convergendo logaritmicamente. Quindi avresti bisogno di un numero esponenzialmente elevato di termini per convergere - in breve, non usarlo.
Mistico

21
Sì, la formula di Chudnovsky converge a 14.18 cifre fisse per termine. Quindi puoi dividere il numero totale di cifre per quello per ottenere quanti termini hai bisogno. (Valore esatto è: Log(151931373056000)/Log(10) = 14.181647462725477655...)
Mysticial

7
@ erikb85 Kinda. La formula BBP (in una certa misura) conta come un secondo algoritmo. Ma di per sé non è sufficiente poiché non verifica la conversione in base 10. L'idea di utilizzare il controllo di conversione BBP + per eliminare la necessità di un secondo calcolo non era mia. È stato realizzato per la prima volta da Fabrice Bellard nel suo record mondiale del 2009. È stata una buona idea che abbiamo fatto lo stesso e ci siamo migliorati.
Mistico

83
@FunsukWangadu Posso solo parlare da solo, ma eccolo qui: in realtà non mi è mai importato di Pi stesso. Per me, è solo un altro numero. Il valore non è nel numero stesso o nei 10 terabyte di cifre inutili, sono i metodi utilizzati per raggiungerlo. I secoli di matematica e i decenni di ricerca informatica / di programmazione che hanno contribuito a questa impresa sono applicabili a molti altri campi e quindi sono MOLTO più preziosi di un disco rigido di cifre. Per dirla semplicemente: calcolare le cifre di Pi è più uno sport.
Mistico

8
@Mystical, appena inciampato sul tuo sito di calcolo Pi da un'altra domanda di StackOverflow e non potevi fare a meno di meravigliare e ridere di ciò che voi ragazzi avete fatto. Ho adorato i guasti / terremoti del disco rigido nei registri :) puro incredibile!
Joe,

48

Indubbiamente, per i tuoi scopi (che presumo sia solo un esercizio di programmazione), la cosa migliore è controllare i tuoi risultati rispetto a uno degli elenchi delle cifre di pi sul web.

E come sappiamo che quei valori sono corretti? Bene, potrei dire che ci sono modi informatici per dimostrare che un'implementazione di un algoritmo è corretta.

Più pragmaticamente, se persone diverse usano algoritmi diversi e tutti concordano di (scegliere un numero) un migliaio (milioni, qualunque sia) di cifre decimali, questo dovrebbe darti una calda sensazione confusa di aver capito bene.

Storicamente, William Shanks pubblicò pi di 707 decimali nel 1873. Povero ragazzo, commise un errore a partire dal 528esimo decimale.

Molto interessante, nel 1995 è stato pubblicato un algoritmo che aveva la proprietà che avrebbe calcolato direttamente l'ennesima cifra (base 16) di pi senza dover calcolare tutte le cifre precedenti !

Infine, spero che il tuo algoritmo iniziale non sia pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...quello che potrebbe essere il più semplice da programmare, ma è anche uno dei modi più lenti per farlo. Consulta l'articolo pi su Wikipedia per approcci più rapidi.


7
L'ultima formula (formula di Leibniz, iirc) alterna effettivamente addizione e sottrazione.
Thomas,

21

È possibile utilizzare più approcci e vedere se convergono alla stessa risposta. O prendine un po 'dalla rete. L'algoritmo di Chudnovsky è di solito usato come metodo molto veloce per calcolare pi. http://www.craig-wood.com/nick/articles/pi-chudnovsky/


Riduce le possibilità, ma non posso ancora essere sicuro con la soluzione di approccio multiplo, e se entrambi fossero sbagliati. Il controllo su rete non ha validità, quindi perché non prendere valori dalla rete stessa. Sto pensando a bbp quale è più adatto?
Ishan Sharma,

7
@IshanSharma Se i due algoritmi sono indipendenti, le possibilità che entrambi i calcoli siano errati con risultati identici è praticamente zero. Se qualcosa va storto in entrambi i calcoli, i risultati finali non corrisponderanno, quindi sai che almeno uno di essi è sbagliato.
Mistico

15

La serie Taylor è un modo per approssimare il pi. Come notato converge lentamente.

Le somme parziali della serie di Taylor possono essere mostrate all'interno di un moltiplicatore del prossimo termine lontano dal vero valore di pi.

Altri mezzi per approssimare pi hanno metodi simili per calcolare l'errore massimo.

Lo sappiamo perché possiamo dimostrarlo matematicamente.


Distaccato. Penso che la maggior parte delle risposte qui non stiano dando abbastanza peso al concetto di prova matematica . Qualunque sia il tuo programma per calcolare cifre di pi, non sarà mai più convincente della prova matematica più convincente che il metodo del tuo programma effettivamente calcola pi. Il che suggerisce un diverso vincolo per i programmi che calcolano più: che dovrebbero mirare tanto alla comprensibilità quanto alle prestazioni e alla correttezza.
Luis Casillas,

5

Potresti provare a calcolare sin(pi/2)(o cos(pi/2)per questo) usando le serie di potenze (abbastanza) rapidamente convergenti per sin e cos. (Ancora meglio: utilizzare varie formule di raddoppio per calcolare più vicino x=0per una convergenza più veloce.)

A proposito, meglio che usare la serie per tan(x)è, con il calcolo dire cos(x)come una scatola nera (ad esempio potresti usare la serie di Taylor come sopra) è fare la ricerca della radice tramite Newton. Esistono sicuramente algoritmi migliori là fuori, ma se non vuoi verificare tonnellate di cifre questo dovrebbe essere sufficiente (e non è così difficile da implementare, e hai solo bisogno di un po 'di calcolo per capire perché funziona).


6
Non capisco come sarebbe utile individuare che la 1000a cifra è disattivata di 1. Avresti bisogno di valori molto precisi, sin(pi/2)no?
Matthieu M.

Non sono sicuro di cosa dire sulla risposta precedente, a meno che non sia uno scherzo o qualcosa del genere. sin (pi / 2) = 1 cos (pi / 2) = 0 Quindi, direi che quelli sicuramente convergono velocemente.
BentFranklin,

15
Immagino non sia ovvio per tutti che la valutazione sin(x)e cos(x)l'alta precisione siano in realtà molto più difficili rispetto al calcolo del Pi stesso.
Mistico il

2
Per ovvie ragioni, non dovresti usare sin (pi / 2) per questo. Meglio invece usare sin (pi / 6) e assicurarsi che esca esattamente come 1/2.
Robert Lozyniak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.