From ede77458c98452da90501f3d5ea868529475cdec Mon Sep 17 00:00:00 2001 From: Hugo TRACHINO <hugo.trachino@pc127-01.pedago.ensiie.fr> Date: Fri, 27 Sep 2019 17:41:32 +0200 Subject: [PATCH] montecarlo computing pi like a boss --- fcts.h | 3 +-- monte_carlo.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 monte_carlo.cpp diff --git a/fcts.h b/fcts.h index 1b9bcbd..c64354f 100644 --- a/fcts.h +++ b/fcts.h @@ -14,7 +14,7 @@ long uniform() { lo+= (hi & 0x7FFF) << 16; lo+= hi >> 15; - if (lo > 0x7FFFFFFFF) + if (lo > 0x7FFFFFFF) lo -= 0x7FFFFFFF; seed=(long) lo; return seed ; @@ -31,7 +31,6 @@ void store_res(long * res, int freqs[], int nRNG, int nCuts){ freqcsv.open("gva_freqs.csv"); int i; for (i = 0; i < nRNG; i ++){ - printf("i = %d, nRNG= %d\n ", i, nRNG); freqs[res[i]%nCuts] ++; myfile << res[i]; myfile << "\n"; diff --git a/monte_carlo.cpp b/monte_carlo.cpp new file mode 100644 index 0000000..1f6de92 --- /dev/null +++ b/monte_carlo.cpp @@ -0,0 +1,32 @@ +#include "fcts.h" + +int main(int argc, char ** argv){ + int i, nRNG; + double nAcc=0; + if(argc < 2){ + return -1; + } + nRNG = atoi(argv[1]); + double x, y; + long res[nRNG*2]; + double max=0; + for (i = 0; i < nRNG; i++){ + x = ((double) uniform())/(double)0x7FFFFFFF; + y = ((double) uniform())/(double)0x7FFFFFFF; + printf("x= %lf", x); + if (x > max) + max = x; + if (x *x + y * y <= 1){ + nAcc ++; + } + res[2*i] = x; + res[2*i+1]=y; + } + printf("\n max = %lf \n", max); + int freqs[10]; + for (i = 0; i < 10 ; i++) + freqs[i] = 0; + store_res(res, freqs, nRNG, 10); + double pi = 4 * nAcc/nRNG; + printf("%lf \n", pi); +} -- GitLab