Ir para conteúdo
Fórum Script Brasil

ribskz

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre ribskz

ribskz's Achievements

0

Reputação

  1. eu tenho o seguinte código que faz a soma de uma progressão harmônica: 1/1, 1/2, 1/3, 1/4, ... definida por: Sn = ∑ i=1n (1/i) #include <stdio.h> #include <string.h> #include <omp.h> #define START 1000000 #define STEP 1000000 #define END 10000000 #define DIGITS 1000 void sum(char* output, const long unsigned int d, const long unsigned int n) { long unsigned int digit, i, remainder, div, mod; long unsigned int digits[d + 11]; for (digit = 0; digit < d + 11; ++digit) { digits[digit] = 0; } for (i = 1; i <= n; ++i) { remainder = 1; for (digit = 0; digit < d + 11 && remainder; ++digit) { div = remainder / i; mod = remainder % i; digits[digit] += div; remainder = mod * 10; } } for (i = d + 11 - 1; i > 0; --i) { digits[i - 1] += digits[i] / 10; digits[i] %= 10; } if (digits[d + 1] >= 5) { ++digits[d]; } for (i = d; i > 0; --i) { digits[i - 1] += digits[i] / 10; digits[i] %= 10; } sprintf(output,"%lu.",digits[0]); unsigned long int t = strlen(output); for (i = 1; i <= d; ++i) output[t++] = digits[i]+'0'; output[t] = '\0'; } int main() { long unsigned int n; double start, finish; char output[DIGITS + 10]; // extra chars to avoid error for (n=START; n<=END; n+=STEP) { start = omp_get_wtime(); sum(output, DIGITS, n); finish = omp_get_wtime(); fprintf(stdout,"%s\n",output); fprintf(stderr,"%lu %lf\n",n,finish-start); } return 0; } pra paralelizar esse trecho, tenho que adicionar 2 diretivas openmp, uma no laço a ser a identificado e outra na seção critica, alguma ideia? não manjo muito de c e to meio perdido kkkkkk
×
×
  • Criar Novo...