Calcolo cifra piGreco

thedarkhero
Esiste un algoritmo che consente di calcolare l'n-sima cifra di piGreco?

Risposte
dissonance
In quel caso fai come ho scritto nel post precedente, come punto iniziale prendi 3.

thedarkhero
Grazie
Ma se senza conoscere nessuna cifra volessi calcolare le prime n?

dissonance
Mah, secondo me se vuoi costruire un algoritmo per calcolare le cifre di $pi$ ti conviene lasciare perdere questo metodo BBP che oggettivamente non è molto semplice. Io userei il fatto che $pi$ è il primo zero positivo di $sin$. Allora per calcolarlo si può applicare il metodo di Newton alla funzione $sin$, scegliendo un punto iniziale prossimo a $pi$. Più cifre di $pi$ si conoscono, più vicino a $pi$ potrai scegliere il punto iniziale, e più in profondità arrivi. Ho fatto la prova: scegliendo 3 come punto iniziale dopo 2 iterate abbiamo già 3.1416 ovvero quattro cifre significative sono corrette.

E' un metodo "fatto in casa" ma è semplice e tutto sommato abbastanza valido.

thedarkhero
E se si conoscessero le prime n cifre di pi greco quale sarebbe il miglior algoritmo per calcolare l'n+1esima?

dissonance
Devi usare l'algoritmo del pdf per calcolare la parte frazionaria di $16^3pi$. In questo periodo non ho assolutamente il tempo per rivedermi come funziona quell'algoritmo però...

thedarkhero
Visto che la cosa continua a non essermi chiara cosa ne dici di scrivermi come si calcola la 3° cifra di pi greco in modo che io poi possa capire il procedimento 'generale'?

dissonance
E' per questo che applichi il procedimento a $2^dlog\ 2$, $16^dpi$, anziché a $log\ 2, pi$. Rifletti bene: che cos' è la parte frazionaria di $2^dlog\ 2$, $16^dpi$, in base 2 e 16 rispettivamente? E che relazione ha con la $d$-esima cifra dell'allineamento binario e esadecimale, rispettivamente, dei due numeri? Prima di rispondere, pensaci da solo... E se vuoi un suggerimento, la risposta a questa domanda è scritta nel mio ultimo post.

thedarkhero
Ok ma noi non vogliamo calcolare le prime n cifre ma solo l'n-sima no?

dissonance
scusami se non ti sto dedicando molto tempo, purtroppo in questi giorni sono molto impegnato. Comunque: non devi "calcolare gli Sj". Tu non devi calcolare quasi nulla di esatto, in questo procedimento. Come si vede bene nella parte relativa a $log\ 2$, quello che in effetti facciamo è calcolare con approssimazione la parte frazionaria di $2^dlog\ 2$ (e di $16^dpi$). Otteniamo un numero soggetto ad errore. Questo errore lo possiamo controllare con opportune stime (presenti nel pdf) e quindi dire che, di quella parte frazionaria, sicuramente alcune cifre sono corrette. In particolare è corretta la cifra più grande, ovvero la $d$-esima cifra dell'espansione binaria di $log\ 2$ (esadecimale di $pi$).

thedarkhero
Ok ma una volta calcolati gli Sj come si procede?

dissonance
Non posso darti torto: non è molto chiaro. Dunque, l'idea è sempre la stessa che abbiamo usato per $log\ 2$, solo che stavolta l'espansione in serie è costituita da quattro "pezzi". Quindi quando passiamo alla parte frazionaria avremo quattro oggetti tipo $16^dS_j$ (stiamo calcolando cifre esadecimali), dove per ogni $j$ in ${1, 4, 5, 6}$, $S_j$ è uguale a $sum_{k=0}^infty1/(16^k(8k+j))$ (è uno dei "pezzi" della formula $sum_{i=0}^infty1/(16^i)(4/(8i+1)-2/(8i + 4) -1/(8i + 5) -1/(8i + 6))$). E' su ognuno di questi che dovremo applicare il discorso fatto prima per $log\ 2$. Questa è l'idea detta mooolto alla buona.

thedarkhero
Del paragrafo "BBP algorithm for pi" non ho capito molto...

dissonance
Certo, provo a fare del mio meglio! Cosa non ti è chiaro?

thedarkhero
Ho riletto il pdf ma alcune cose non mi sono chiare...puoi aiutarmi?

dissonance
Ripeto: si vede che non hai letto con attenzione, oppure non hai letto per nulla, né i miei post né tantomeno il pdf di cui parlavamo prima.

E' chiaro che la cosa interessante non è la serie $sum_{i=0}^infty1/(16^i)(4/(8i+1)-2/(8i + 4) -1/(8i + 5) -1/(8i + 6))$ per $pi$, né la serie $sum_{k=0}^infty1/(k2^k)$ per $log\ 2$. Queste sono formule che di per sé non hanno niente di nuovo. Il concetto alla base di questo metodo è quello che tentavo di spiegarti prima, e che è espresso nel dettaglio nel pdf dell'autore.

Se vuoi capire qualcosa di questo argomento, è meglio che lasci perdere l'idea di avere la pappa pronta. Non è una cosa semplicissima da digerire, richiede un po' di lavoro: se vuoi io sono disposto a darti una mano e a lavorarci insieme ma tu devi collaborare.

thedarkhero
π=∑i=0∞116i(48i+1-28i+4-18i+5-18i+6) è un modo per scrivere pi greco come una serie...non è questo che volevo ma ottenere ad esempio la decima cifra dopo la virgola senza calcolare le precedenti

dissonance
Probabilmente non hai letto con sufficiente attenzione né il pdf, né il mio post. Che cosa vuol dire la tua domanda? Cosa intendi dire con "quella formula mi calcola pi greco"?

thedarkhero
Quella formula l'ho capita e mi calcola pi greco.
Non ho capito come calcolare la d-esima cifra...praticamente la fine di quello che hai scritto...

dissonance
"thedarkhero":
L'ho letto ma non ho trovato il calcolo dell'ennesima cifra...

E come hai fatto a non trovarlo? Non si parla d'altro! :-D

Quel pdf funziona così: prima ti fa vedere un metodo analogo per il calcolo della $d$-esima cifra binaria di $log\ 2$, in cui i calcoli sono più semplici. Poi passa alla $d$-esima cifra esadecimale di $pi$. A grandi linee, mi pare di capire che l'idea, nel caso di $log\ 2$, sia questa:
$log\ 2=sum_{k=0}^infty1/(k2^k)$. (E questo lo diamo per buono).
Ora vogliamo calcolare la cifra $d$-esima di $log\ 2$ in base 2. Lo facciamo moltiplicando per $2^d$ e poi passando alla parte frazionaria.
La formula di sopra per $log\ 2$ è vantaggiosa: $2^dsum_{k=0}^infty1/(k2^k)=sum_{k=0}^infty2^(d-k)/k$. Passando alla parte frazionaria, che denotiamo con ${cdot}$, (formalmente, per ogni numero reale $x$, chiamiamo ${x}$ la differenza $x-[x]$, dove $[x]$ è il più grande intero minore od uguale a $x$) otteniamo
${2^dlog\ 2}={sum_{k=0}^infty2^(d-k)/k}={sum_{k=0}^d2^(d-k)/k+sum_{k=d+1}^infty2^(d-k)/k}$,
che è uguale a ${{sum_{k=0}^d2^(d-k)/k}+sum_{k=d+1}^infty2^(d-k)/k}$ perché il primo addendo è certamente più grande di 1, mentre il secondo è certamente (strettamente) compreso fra 0 e 1.
Altro passaggio, quella parte frazionaria è uguale a questa: ${{sum_{k=0}^d(2^(d-k)\ "mod"\ k)/k}+sum_{k=d+1}^infty2^(d-k)/k}$. Il che segue da questo fatto sui numeri razionali: ${p/q}={(p\ "mod" q)/q}$ (con la scrittura $p\ "mod"\ q$ indico il resto della divisione per $q$), che mi pare evidente: trasformando in questa maniera il numeratore, non tocchiamo la parte frazionaria ma solo quella intera di $p/q$.

Bene, a questo punto ti lascio al pdf. La prima delle due somme si può fare in maniera rapida con quello che lui chiama "binary algorithm for exponentiation", che è spiegato rapidamente a pagina 2; mentre la seconda somma (quella infinita) ha gli addendi che decrescono rapidamente, cadendo molto presto al di sotto della precisione di macchina.

Il metodo per la $d$-esima cifra esadecimale di $pi$ è analogo a questo, e si basa sulla formula
$pi=sum_{i=0}^infty1/(16^i)(4/(8i+1)-2/(8i + 4) -1/(8i + 5) -1/(8i + 6))$.

P.S.: Ripeto, sono cose che sto vedendo anche io per la prima volta. Mi pare di capire che l'idea sia questa. Attento ad eventuali errori miei.

thedarkhero
up

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.