Cambio size_t por long

main
Sebastián Santisi 11 months ago
parent c1c5c91860
commit 23e2db3f9e

@ -8,20 +8,20 @@ int main(int argc, char *argv[]) {
return 1; return 1;
} }
size_t tiros = atol(argv[1]); long tiros = atol(argv[1]);
size_t positivos = 0; long positivos = 0;
for(size_t i = 0; i < tiros; i++) { for(long i = 0; i < tiros; i++) {
double x = (double)random() / RAND_MAX; double x = (double)rand() / RAND_MAX;
double y = (double)random() / RAND_MAX; double y = (double)rand() / RAND_MAX;
if(x * x + y * y < 1) if(x * x + y * y < 1)
positivos++; positivos++;
} }
double pi = 4.0 * positivos / tiros; double pi = 4.0 * positivos / tiros;
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos); printf("Tiros = %ld, Positivos = %ld\n", tiros, positivos);
printf("π ~= %.15f\n", pi); printf("π ~= %.15f\n", pi);
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI); printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
return 0; return 0;

@ -11,20 +11,20 @@ int main(int argc, char *argv[]) {
srand(time(NULL)); srand(time(NULL));
size_t tiros = atol(argv[1]); long tiros = atol(argv[1]);
size_t positivos = 0; long positivos = 0;
for(size_t i = 0; i < tiros; i++) { for(long i = 0; i < tiros; i++) {
double x = (double)random() / RAND_MAX; double x = (double)rand() / RAND_MAX;
double y = (double)random() / RAND_MAX; double y = (double)rand() / RAND_MAX;
if(x * x + y * y < 1) if(x * x + y * y < 1)
positivos++; positivos++;
} }
double pi = 4.0 * positivos / tiros; double pi = 4.0 * positivos / tiros;
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos); printf("Tiros = %ld, Positivos = %ld\n", tiros, positivos);
printf("π ~= %.15f\n", pi); printf("π ~= %.15f\n", pi);
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI); printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
return 0; return 0;

@ -12,16 +12,16 @@ int main(int argc, char *argv[]) {
printf("Hilos: %d\n", omp_get_max_threads()); printf("Hilos: %d\n", omp_get_max_threads());
size_t tiros = atol(argv[1]); long tiros = atol(argv[1]);
size_t positivos = 0; long positivos = 0;
#pragma omp parallel reduction(+: positivos) #pragma omp parallel reduction(+: positivos)
{ {
int seed = time(NULL) + omp_get_thread_num(); int seed = time(NULL) + omp_get_thread_num();
#pragma omp for #pragma omp for
for(size_t i = 0; i < tiros; i++) { for(long i = 0; i < tiros; i++) {
double x = (double)rand_r(&seed) / RAND_MAX; double x = (double)rand_r(&seed) / RAND_MAX;
double y = (double)rand_r(&seed) / RAND_MAX; double y = (double)rand_r(&seed) / RAND_MAX;
if(x * x + y * y < 1) if(x * x + y * y < 1)
@ -31,7 +31,7 @@ int main(int argc, char *argv[]) {
double pi = 4.0 * positivos / tiros; double pi = 4.0 * positivos / tiros;
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos); printf("Tiros = %ld, Positivos = %ld\n", tiros, positivos);
printf("π ~= %.15f\n", pi); printf("π ~= %.15f\n", pi);
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI); printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
return 0; return 0;

@ -21,24 +21,24 @@ int main(int argc, char *argv[]) {
srand(time(NULL) + mi_rank); // Ojo, tal vez un proceso se lanza un segundo después que otro y esta cuenta coincide. srand(time(NULL) + mi_rank); // Ojo, tal vez un proceso se lanza un segundo después que otro y esta cuenta coincide.
size_t tiros = atol(argv[1]); long tiros = atol(argv[1]);
tiros = tiros / num_procs * num_procs; tiros = tiros / num_procs * num_procs;
size_t positivos_parciales = 0; long positivos_parciales = 0;
for(size_t i = 0; i < tiros / num_procs; i++) { for(long i = 0; i < tiros / num_procs; i++) {
double x = (double)random() / RAND_MAX; double x = (double)rand() / RAND_MAX;
double y = (double)random() / RAND_MAX; double y = (double)rand() / RAND_MAX;
if(x * x + y * y < 1) if(x * x + y * y < 1)
positivos_parciales++; positivos_parciales++;
} }
size_t positivos; long positivos;
MPI_Reduce(&positivos_parciales, &positivos, 1, MPI_LONG, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&positivos_parciales, &positivos, 1, MPI_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
if(! mi_rank) { if(! mi_rank) {
double pi = 4.0 * positivos / tiros; double pi = 4.0 * positivos / tiros;
printf("Tiros = %zd, Positivos = %zd\n", tiros, positivos); printf("Tiros = %ld, Positivos = %ld\n", tiros, positivos);
printf("π ~= %.15f\n", pi); printf("π ~= %.15f\n", pi);
printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI); printf("ε = %f%%\n", 100 * fabs(M_PI - pi) / M_PI);
} }

Loading…
Cancel
Save