Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
#include <stdio.h>
#include <stdlib.h>
int my_pow(int steps);
main() {
double *f,*a,*A;
double base,pi,a1=0,A1=0,x=0;
int i,steps;
printf( "\nAttenzione: Maggiore saràil numero di passi di approssimazione, maggiore saràil tempo\n"
"che il calcolatore impiegheràa calcolare pi!\n\n");
printf( "Quanti passi di approssimazione devo effetturare? (1-100) ");
scanf("%d",&steps);
if ((steps<1) || (steps>100)) {
printf( "Numero di passi non valido\n");
return -1;
}
f = (double*) malloc (my_pow(steps-1)*sizeof(double));
a = (double*) malloc (my_pow(steps-1)*sizeof(double));
A = (double*) malloc (my_pow(steps-1)*sizeof(double));
base = (float) 1/(my_pow(steps-1));
f[0] = 1;
for (i=1; i<=my_pow(steps-1); i++) {
x += base;
f[i] = 1/(1+x*x);
a[i] = base*f[i];
A[i] = base*f[i-1];
}
for (i=1; i<=my_pow(steps-1); i++) {
A1 += A[i];
a1 += a[i];
}
pi = (A1+a1)*2;
printf("Approssimazione di pi: %.40lf\n",pi);
}
int my_pow(int steps) {
int i,res=1;
for (i=0; i<steps; i++)
res*=2;
return res;
}
sicuro?BlackLight ha detto:Sappiamo tutti che la primitiva di 1/(1/x²) è arctan(x). L'arcotangente di x calcolata fra 0 e 1 è pi/4 [ arctan(1) - arctan(0) = pi/4 - 0 ].
kr1pn0$ ha detto:a me no........ma devo dire che ti apre un mondo...
Sappiamo tutti che la primitiva di 1/(1/x²) è arctan(x). L'arcotangente di x calcolata fra 0 e 1 è pi/4 [ arctan(1) - arctan(0) = pi/4 - 0 ].
$a = 1/(1/1*1);
$b = 1/(1/0*0);
$ris = $a - $b;
$pi = $ris * 4;
print "Il PGreco è $pi"
begin
var A,B,C: integer;
A:= ARCTAN(1);
B:= ARCTAN(0);
C:= ( A - B ) * 4;
writeln("Il Valore di PI e", C);
end.
import javax.swing.*;
class pgreco
{
public void main(String[] args)
{
double a = 1/(1/1*1);
double b = 1/(1/0*0);
double risultato = a-b;
double pigreco = risultato*4;
string comp = "Pi greco vale: "+pigreco+" ";
Jframe finestra = new JFrame("Pigreco vale...");
JLabel PGrec = new JLabel(comp);
finestra.setSize(200,60);
finestra.add(PGrec);
}
}
kr1pn0$ ha detto:a me no........ma devo dire che ti apre un mondo...
R4z0r_Cr4$H ha detto:[ot][/ot]
BlackLight ha detto:Di fatto l'arcotangente non la devi mai calcolare direttamente, è in questo che sta il punto di forza dell'algoritmo...
Il calcolo dell'arcotangente di un numero a livello computazionale è un'operazione che ha la sua complessità(dato che l'arcotangente va sviluppata in serie di Taylor a livello del calcolatore, con un grado di precisione arbitrario). Ma la notevole proprietàdell'arcotangente è che, pur essendo una funzione trigonometrica relativamente complessa, la sua derivata è f'(x) = 1/(1+x²), che è una funzione razionale relativamente semplice. Quindi di fatto non devi mai calcolare direttamente l'arcotangente, ma passi per il calcolo dell'integrale della sua derivata. E il calcolo lo fai dividendo via via l'intervallo fra 0 e 1 di f'(x) in segmenti sempre più piccoli (più piccoli sono i segmenti in cui vai a tagliare l'intervallo, maggiore saràil numero di rettangoli e quindi la "risoluzione" dell'integrale, e maggiore saràanche la precisione del calcolo di pi greco).
Ad esempio
f'(0) = 1/(1+0) = 1
f'(1) = 1/(1+1) = 0.5
In questo primo passo considero il rettangolo avente base = 1 (tutto l'intervallo) e altezza pari al minimo fra i due valori calcolati (0.5). Il rettangolo calcolato così per difetto avràquindi area pari a 1*0.5 = 0.5. Il rettangolo calcolato per eccesso avràarea pari alla base per il massimo valore (1), quindi 1*1 = 1. Il valore più vicino all'area effettiva dell'integrale è dato dalla media, ovvero (1+0.5)/2 = 0.75. Moltiplicato per 4, ottengo 0.75*4 = 3. E questa è una prima approssimazione ottenuta dividendo l'intervallo [0,1] di f'(x) = 1/(1+x²) in sé stesso, e considerando il rettangolo costruito prendendo come altezza il valore massimo assunto in uno dei due estremi (f'(0) = 1) e quello costruito prendendo come altezza il valore minimo (f'(1) = 0.5) per poi farne la media e moltiplicarla per 4. Se suddivido l'intervallo in vari sotto-intervalli, con i relativi rettangolini che vado poi a sommare, ottengo un valore via via più preciso.
#include <stdio.h>
#include <stdlib.h>
double f(double p);
int main() {
int n;
double p=0,yn,i,ap;
printf( "Numero di intervalli: ");
scanf("%d",&n);
p= 1/(double)n;
ap=p;
for(i=1;i<n;i++) {
yn+=f(ap);
ap+=p;
}
yn=p*(((f(0)+f(1))/2)+yn);
printf("Approssimazione di pi: %.40lf\n",yn*4);
}
double f(double p) {
return (1/(1+(p*p)));
}
~Ste ha detto:kr1pn0$ ha detto:a me no........ma devo dire che ti apre un mondo...
Hai fatto l'esame di analisi matematica I ?? Dubito
from math import atan
long=int(raw_input("Inserisci la quantita' di decimali: "))
pg=(atan(1)-atan(0))*4
pg=list(str(pg))
global tot
tot=[]
tot.append(pg[0])
tot.append(pg[1])
del pg[0]
del pg[0]
for i in range(0, long):
tot.append(pg[i])
print ''.join(tot)