Obtenir un double a partir d'un calcul avec des int.

Fermé
Godefroy Leys Messages postés 1 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 5 septembre 2015 - Modifié par KX le 5/09/2015 à 09:24
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 5 sept. 2015 à 20:22
Bon je vais éclaircir le problème. N'ayant pas grand chose a faire j'ai voulut écrire un petit programme pour estimer la valeur de pi suivant la méthode monte carlo. Sauf que j'ai rencontrer un petit problème la valeur de pi et par définition un nombre a virgule, or ma méthode ne nécessite que l'utilisation de deux valeur entière donc au début j'ai déclarer mais deux variable comme des int. Sauf que du coup quand j'effectue le calcul de la valeur de pi a partir de ces int cela me renvoie automatiquement une valeur entière, j'ai bien trouver une solution en déclarant mais deux variable en double mais je trouve que ceci et un peu artificiel donc pourriez vous me dire comment je peu modifier mon code en gardant les variable interieur et exterieur en int.

Voici le code :

int main(void){
  time_t t;
  t = time(&t);
  srand48((long) t);
  double x,y,r,pi,interieur=0,exterieur=0;
  int N;
  
  cout<<"Entrer le nombre de point a répartir plus il seras grand, plus le nombre de point et grand plus l'estimation de pi seras bonne."<<endl;
  cin>>N;
  for(int i=0;i<N;i++){
    x=drand48();
    y=drand48();
    r=sqrt(x*x+y*y);
    if(r>1){exterieur=exterieur+1;}else{interieur=interieur+1;};
  };
  
  cout<<"Nombre de points a l'interieur du cerlcle = "<<interieur<<endl;
  cout<<"Nombre de points hors du cercle = "<<exterieur<<endl;
  pi=(4*interieur)/(exterieur+interieur);
  cout.precision(15);
  cout<<"pi = "<<pi<<endl;
  return 0;
}
A voir également:

1 réponse

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 5/09/2015 à 20:29
Ceci fonctionnera mieux:
#include <iostream>
#include <stdlib.h>
#include <math.h>

int main(void){
  time_t t;
  t = time(&t);
  srand48((long) t);
  double x,y,r,pi,interieur=0,exterieur=0;
  int N;
  
  std::cout<<"Entrer le nombre de point a répartir plus il seras grand, plus le nombre de point et grand plus l'estimation de pi seras bonne."<<std::endl;
  std::cin>>N;
  
  for(int i=0;i<N;i++){
    x=drand48();
    y=drand48();

    if( x*x+y*y >1 )
      {
 exterieur++;
      }
    else
      {
 interieur++;};
  };
  
  std::cout<<"Nombre de points a l'interieur du cerlcle = " << interieur << std::endl;
  std::cout<<"Nombre de points hors du cercle = "<< exterieur<< std::endl;
  pi=(4.0 * interieur) / (exterieur + interieur);
  std::cout.precision(15);
  std::cout<<"pi = "<< pi<< std::endl;
  return 0;
}

processus:
johand@bata:~/src/CCM/C$ ./carlo 
Entrer le nombre de point a répartir plus il seras grand, plus le nombre de point et grand plus l'estimation de pi seras bonne.
10000
Nombre de points a l'interieur du cerlcle = 7867
Nombre de points hors du cercle = 2133
pi = 3.1468

L'utilisation de 4.0 forcera l'évaluation en flottant.
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
0