[lisp] pi calculator

Stato
Discussione chiusa ad ulteriori risposte.

imported_Bronsa

Utente Silver
28 Ottobre 2007
108
6
0
82
programma che calcola n cifre di pi greco, utilizzo la formula di Machin,e la serie di Taylor per calcolare l'arcocotangente
per rendere piu' veloce l'esecuzione e per evitare stack overflow ha usato tail-recursion
inoltre per evitare di thrownare in floating-point-overflow,opero su interi anziche' su numeri floating,moltiplicando tutto pper 10^x
il tempo di esecuzione quadruplicizza al raddoppiare delle cifre da trovare sul mio pc per calcolare 50mila cifre dopo la virgola impiega 15secondi
il codice e' implementation dependent, l'ho volutamente reso compatibile solo usando sbcl dall momento chee' l' unica implementazione in grado di svolgere questi conti e lo fa ottimamente poivhe! a differenza di altre implementazioni, sbcl compila in codice macchina anziche bytecode
purtroppo viene eseguita senza sfruttare il multi core, sto pensando di utilizzare dei binding delle opencl per aumentare la velocita- di czlcolo
il sorgente si trova su http://sprunge.us/eCPK?cl per chi non avesse sbcl, domani troverete in http://bronsa.net/pi.tar.gz il compilato, purtropppo compilare in lisp equivale a creare un binario contenente una versione base dell!interprete e il vodice stesso , pesa sui 44 mega
scusate per i typo fzil ma ho scritto dzal mio kindle perche! sono senza internet
commenti e suggerimenti sono ben accetti

P.S se riesco a trovare un modo per trasformare floating in interi anche con gauss leilegendre, implementero quello che rendera! tutto molto piu, veloce


EDIT
codice migliorato, velocità aumentata dal 65% http://sprunge.us/jjbS?cl
 
per uno scriptino così corto e sicuramente fatto anche da altri lo pubblichi addirittura su "i vostri rpogrammi" ? non era meglio nella sezione programmazione?
argomenta o sposto
 
beh, effettuato abbastanza modifiche al codice, in questo modo ho abbassato notevolmente il carico all'interprete velocizzando lo script del ~ 65%

qui il codice http://sprunge.us/jjbS?cl
 
siccome non c'ho un pazzo da fare, ho utilizzato 2 thread per calcolare le 2 arcocotangenti
non comporta un grandissimo aumento di prestazioni, siamo nell'ordine di una decina di secondi al minuto

http://sprunge.us/cYNY?cl
 
Stato
Discussione chiusa ad ulteriori risposte.