Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] - calcolo di PI-GRECO

    ciao,

    la funzione che segue calcola pi-greco. In essa sqr() restituisce la radice quadrata e pow() calcola la potenza m-esima di 2. Nella dichiarazione delle var metto m=7 ed uso il metodo con m-1 radici quadrate.

    codice:
    long double pi(void){
    	/* Calcola pi-greco */
    	int m = 7, n, i;
    	long double p, g;
    	for(n = m - 2, i = 0, g = sqr(2); i < n; ++i, g = sqr(2 + g))
    		continue;
    	return(pow(2, m) * sqr(2 - g));
    }
    Ho 2 domande:

    1) esiste un modo + elegante di m=7

    2) perchè se aumento il valore di m non ottengo + il classico valore 3.1415 magari con una precisiaone maggiore?
    cosa non ho capito di questo algoritmo? ad esempio per m=10
    ottengo 2.8813


    ciao
    grazie

  2. #2
    Utente di HTML.it L'avatar di Corwin
    Registrato dal
    Jan 2002
    Messaggi
    584
    Ma pi greco non il rapporto tra circonferenza e diametro di un cerchio ?
    I don't wanna have to shout it out / I don't want my hair to fall out
    I don't wanna be filled with doubt / I don't wanna be a good boy scout
    I don't wanna have to learn to count / I don't wanna have the biggest amount
    I don't wanna grow up

  3. #3
    Utente di HTML.it L'avatar di Corwin
    Registrato dal
    Jan 2002
    Messaggi
    584
    Vabbè, mi sono documentato un po', esistono formule per calcolarlo...

    1) Il numero 7 è arbitrario: puoi mettere il numero di iterazioni che vuoi. Ma aumentare m non rende la funzione più precisa perchè già un partenza i numeri a virgola mobile sono un approssimazione del numero che dovresti esprimere, e iterare più volte g = sqr(2+g) oltre un certo punto comincia ad "allontanarti" dal risultato voluto (non ho un compilatore c sottomano, ho copiato la routine in java e se metto m = 25 mi ritrovo alla fine con pi greco che vale 3.16!)
    Credo che venga messo 7 perchè con la precisione dei double e le operazioni coinvolte nel calcolo è il valore che ti permette di avvicinarti di più al pi greco "reale".
    Quello che non riesco a capire è come possa darti 2.8813 se metti m=10... :master:
    I don't wanna have to shout it out / I don't want my hair to fall out
    I don't wanna be filled with doubt / I don't wanna be a good boy scout
    I don't wanna have to learn to count / I don't wanna have the biggest amount
    I don't wanna grow up

  4. #4
    ti ringrazio... mi hai chiarito parecchie cose

    non so il perchè di 2.8813 forse dipende dai tipi che ho usato

    appena ho una risposta la posto

    ciao e grazie ancora

  5. #5
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Dato che si parla di PI greco...
    Tempo fa volevo fare un programma che tira fuori X valori decimali a scelta del PI (so che è possibile farlo)...
    Avevo cercato qualche formula, ma senza successo...

    Voi sapete darmi qualche dritta?
    Voglio calcolare il PI arrotondato a un biliardesimo!
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    415
    uppe

    sono interessato anch'io...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    567
    un po' di basi matematiche... per ottenere PiGreco senza ricorrere a funzioni note già disponibili nelle librerie math.h (arctan prima di tutto) è consigliabile utilizzare qualche metodo di approssimazione serio. Cito i moti più semplici per ottenere un'approssimazione:

    1) dato che 'arctan 1 = pi/4' possiamo scrivere 'pi = 4 * L(arctan x, 1)' dove con L(f(x), c) intendiamo lo sviluppo in serie di MacLaurin della funzione f(x) calcolata in x = c. L(arctan x, 1) = sum[j = 0..n]{(d^j/dx^j(arctan x)|x=0)/ j! * x^j}.
    L'errore, approssimato per eccesso, che si commette (dato un numero 'n' di iterazioni) si ottiene come resto di Lagrange:
    E = (d^(j+1)/dx^(j+1)(arctan x)|x=0)/ (j+1)! * x^(j+1).

    2) dato che 'arctan 1 = pi/4', e dato che 'int[0,1](1/(1+x^2) dx) = arctan 1' allora 'pi = 4*S(1/(1+x^2), 0, 1, n)'. Con S(f(x), a, b) si intende l'approssimazione dell'Integrale da 'a' a 'b' di f(x)dx calcolata col metodo di Simpson dopo 'n' iterazioni. L'errore, approssimato per eccesso, lo si ottiene come:
    E = |S(f(x), a, b, n) - S(f(x), a, b, 2n)|
    "Come vedi tutto è usuale, solo che il tempo chiude la borsa e c'è il sospetto che sia triviale l'affanno e l'ansimo dopo una corsa, l'ansia volgare del giorno dopo, la fine triste della partita, il lento scorrere senza uno scopo di questa cosa che chiami vita."

  8. #8
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da AleX ZeTa
    un po' di basi matematiche... per ottenere PiGreco senza ricorrere a funzioni note già disponibili nelle librerie math.h (arctan prima di tutto) è consigliabile utilizzare qualche metodo di approssimazione serio. Cito i moti più semplici per ottenere un'approssimazione:

    1) dato che 'arctan 1 = pi/4' possiamo scrivere 'pi = 4 * L(arctan x, 1)' dove con L(f(x), c) intendiamo lo sviluppo in serie di MacLaurin della funzione f(x) calcolata in x = c. L(arctan x, 1) = sum[j = 0..n]{(d^j/dx^j(arctan x)|x=0)/ j! * x^j}.
    L'errore, approssimato per eccesso, che si commette (dato un numero 'n' di iterazioni) si ottiene come resto di Lagrange:
    E = (d^(j+1)/dx^(j+1)(arctan x)|x=0)/ (j+1)! * x^(j+1).

    2) dato che 'arctan 1 = pi/4', e dato che 'int[0,1](1/(1+x^2) dx) = arctan 1' allora 'pi = 4*S(1/(1+x^2), 0, 1, n)'. Con S(f(x), a, b) si intende l'approssimazione dell'Integrale da 'a' a 'b' di f(x)dx calcolata col metodo di Simpson dopo 'n' iterazioni. L'errore, approssimato per eccesso, lo si ottiene come:
    E = |S(f(x), a, b, n) - S(f(x), a, b, 2n)|
    :master:
    Do you speak italian?

    Apparte gli scherzi... Se devo essere sincero non ho capito molto
    Io e la matematica non ci vogliamo molto bene mi sa che è meglio se rinuncio...
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  9. #9
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Se non sai a matematica è meglio di sì...
    Io so che con il software "Mathematica 4" di Wolfang research lo possiede un algoritmo che ti calcola il Pi con n cifre.

  10. #10
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da iguana13
    Se non sai a matematica è meglio di sì...
    Io so che con il software "Mathematica 4" di Wolfang research lo possiede un algoritmo che ti calcola il Pi con n cifre.
    Anch'io ne conoscevo un paio... Uno si chiama Super PI... Gli altri non mi ricordo
    Speravo comunque che fosse un pò più facile... Vabbè, comunque era solo per provare: calcolare un pi greco con tanissime cifre decimali non mi serve a niente...
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.