Calcolo pi greco

di il
10 risposte

Calcolo pi greco

Stavo facendo un programma sul calcolo del pi greco e non so come ma ho sbagliato un'espressione semplicissima.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include<math.h>

int punto(int a, int b);

int square(int a);

int main (){
	int x = 0;
	int y = 0; 
	double pigreco = 0.0;
	int dentro = 0;
	srand(time(NULL));
	for (int c = 1; c <= 10000; c++){
	x = rand() % 11;
	y = rand() % 11;
	if(punto(x, y) < 10){
		dentro++;
	}
}
    pigreco = 4 * (dentro /10000);
    printf("\ndentro:%d", dentro); //questo serviva per capire se l'errore stesse nel dividendo 
    printf("\n%f", pigreco);//qui esce zero anche se il dividendo non è zero
}

int punto(int a, int b){
	return sqrt(square(a) + square(b));
}

int square(int a){
	return a*a;
}
Comunque la variabile "dentro" non è uguale a zero: lo conferma quel printf che vedo ogni volta.

10 Risposte

  • Re: Calcolo pi greco

    Usa una costante float nella divisione


    pigreco = 4 * (dentro / 10000.0);

    Comunque, leggi questo

    https://diaridiunfisico.wordpress.com/2018/09/18/quando-sparare-a-caso-funziona-bene-parte-1-calcolo-numerico-del-valore-del-pi-greco/
  • Re: Calcolo pi greco

    Sono tante le cose che hai sbagliato
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define TENTATIVI 1000000
    
    int main (){
    	long dentro = 0;
    	double x, y, pigreco;
    	srand(time(NULL));
    	for (long c = 1; c <= TENTATIVI; c++){
        		x = (double)rand()/RAND_MAX*10.0;
        		y = (double)rand()/RAND_MAX*10.0;
        		if(x*x + y*y <= 100.0)
        			dentro++;
    	}
    	pigreco = 4.0 * dentro / TENTATIVI;
    	printf("\n%f", pigreco);
    	return 0;
    }
    
  • Re: Calcolo pi greco

    NON SERVE usare un cerchio di raggo 10, ne basta uno di raggio 1.
    In questo modo RISPARMI 2 moltiplicazioni.

    La domanda sorge spontanea: lo sai PERCHE' funziona?
  • Re: Calcolo pi greco

    Ciao

    Io per scherzo, anni fa in un pomeriggio assolato in piscina, ho fatto questo

    https://forum.arduino.cc/t/lo-spazio-le-curve-e-le-geometrie/526995
  • Re: Calcolo pi greco

    Quando per la precisione del pigreco, sono sufficienti 15 cifre decimali:
    
    #include<stdio.h>
    #include<math.h>
    
    int main()
    {
       long double PI;
       PI = 4*atan(1);
    
       printf("\nApprossimato  %.27Lf", PI);
       // confronto con il PI "vero"
       printf("\nStringa       %s\n","3.141592653589793238462643383");
    }
    
    Con il calcolo completo, usando un long double si potrebbero risolvere 18 cifre decimali...

    Per fare meglio bisognerebbe scomodare la libreria dei numeri complessi: #include <complex.h>
  • Re: Calcolo pi greco

    Che cosa centrano i numeri complessi?????

    https://it.wikipedia.org/wiki/Calcolo_di_pi_grec
  • Re: Calcolo pi greco

    Rubik ha scritto:


    Quando per la precisione del pigreco,
    Ma che c'entra Rubik?

    Lui ha un preciso problema con un certo algoritmo e tu gli fai usare l'arcotangente?
    La questione non è trovare il valore di pi ma di implementare correttamente l'algoritmo.
  • Re: Calcolo pi greco

    In effetti il thread avrebbe dovuto essere chiamato "metodo Monte Carlo"...
  • Re: Calcolo pi greco

    migliorabile ha scritto:


    Che cosa centrano i numeri complessi?????

    https://it.wikipedia.org/wiki/Calcolo_di_pi_grec
    Se vuoi una precisione maggiore di 12/16bytes di un Long Double, servono.

    oregon ha scritto:


    Rubik ha scritto:


    Quando per la precisione del pigreco,
    Ma che c'entra Rubik?

    Lui ha un preciso problema con un certo algoritmo e tu gli fai usare l'arcotangente?
    La questione non è trovare il valore di pi ma di implementare correttamente l'algoritmo.
    Nulla, non gli faccio usare l'arcotangente, dico solo che si può fare anche così, vista la domanda e un possibile frequentatore potrebbe trovare utile la mia risposta.
    Non dimentico mai che un forum è letto da chi ha posto la domanda che è 1, e tutti gli altri che si imbatteranno nel tempo nella discussione a seguito di una ricerca, che sono xxxxx???
  • Re: Calcolo pi greco

    Se vuoi una precisione maggiore di 12/16bit di un Long Double, servono.
    Ma che c'entra la precisione con i numeri complessi?

    Tu sai cosa sono i numeri complessi?
    Nulla
    E se non c'entra nulla, perché rispondere?
    non gli faccio usare l'arcotangente
    Come no? Hai scritto

    PI = 4*atan(1);

    Secondo te cosa è atan ?
    dico solo che si può fare anche così
    Si può fare in mille modi ma la domanda e il codice riguardano l'implementazione del metodo Monte Carlo, non tutti gli altri.
    vista la domanda e un possibile frequentatore potrebbe trovare utile la mia risposta.
    No, non ha senso.
    Non dimentico mai che un forum è letto da chi ha posto la domanda che è 1, e tutti gli altri che si imbatteranno nel tempo nella discussione a seguito di una ricerca, che sono xxxxx???
    Quindi puoi scrivere quello che vuoi in base ad una domanda? Tu non hai capito nulla dei forum.
Devi accedere o registrarti per scrivere nel forum
10 risposte