Ir para conteúdo
Fórum Script Brasil

melotjk

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por melotjk

  1.  Boa noite, 

    Estou com dificuldade de realizar este exercício da linguagem C utilizando a biblioteca MPI.

    Preciso criar um programa para calcular a tangente do ângulo passado como parâmetro na execução do programa e testar com 4 e 8 processadores. O objetivo desta aplicação é utilizar as séries de Taylor para o cálculo do seno e do cosseno de um determinado ângulo, com o intuito de calcular a tangente deste ângulo. 

    Esse é o formulário:

     

    Fórmula para o cálculo do seno é usada a fórmula infinita:

                Sen x    =         x1 – x3 + x5 – x7  + x9 – x11 + …

                                        1!    3!    5!     7!      9!    11!             (! = fatorial)

    Fórmula para o cálculo do cosseno é usada a fórmula infinita:

                Cos x    =        x0 – x2 + x4 – x6  + x8 – x10 + …

                                        0!    2!    4!     6!     8!   10!

    Fórmula para o cálculo da tangente é usada a fórmula:

    Tan x    =          sen x

                            cos x

     

    Desenvolvi este código para a solução do problema:

     

    #include "mpi.h"
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    
    long fat(int num){
      if(num == 0 || num ==1)
        return 1;
      else
        return num * fat(num-1);     
    }
    
    int main( int argc, char *argv[]){	
    
      double ang_aux, graus, min, seg, ang, sen, cos,
      tg, tempoInicial, tempoFinal, soma_sen, 
      soma_cos, PI=3.14;
     
      int n, myid, numprocesso, i;
            
      MPI_Init(&argc,&argv);
      MPI_Comm_size(MPI_COMM_WORLD,&numprocesso);
      MPI_Comm_rank(MPI_COMM_WORLD,&myid);    
       		   
      if(myid==0){
        printf("Cálculo das funções trigonométricas através do polinômio de Taylor de forma paralela \n");
        graus = atoi(argv[1]);
        min = atoi(argv[2]);
        seg = atoi(argv[3]);
        n = atoi(argv[4]);
        ang_aux = (double) (graus + (min / 60.0) + (seg / 3600.0));
        ang = (ang_aux * PI) / (180.0);
        printf("\nN=%d",n);
        printf("\nGraus: %.0lf Minutos: %.0lf Segundos: %.0lf", graus, min, seg);          
        tempoInicial = MPI_Wtime();
        }
        
        MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
        MPI_Bcast(&ang, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
        
        for (i = myid; i < n; i += numprocesso){
          cos += (double) (pow(-1, i) * pow(ang, 2 * i)) / fat(2 * i) ; 
          sen += (double) (pow(-1, i) * pow(ang, 2 * i + 1)) / fat(2 * i + 1);
        }
        
        MPI_Reduce(&sen, &soma_sen, 1, MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD);
        MPI_Reduce(&cos, &soma_cos, 1, MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD);
        
        tg = (soma_sen / soma_cos);
        
        if (myid == 0) {
          printf("\nSeno de %.1lf %.1lf %.1lf em %d iteracoes = %1.15lf\n\n", graus, min, seg, n, soma_sen);
    	    printf("Cosseno de %.1lf %.1lf %.1lf em %d iteracoes = %1.15lf\n\n", graus, min, seg, n, soma_cos);
    	    printf("Tangente de %.1lf %.1lf %.1lf em %d iteracoes = %1.15lf\n\n", graus, min, seg, n, tg);
    	   
          tempoFinal = MPI_Wtime();
          
          printf("\nTempo inicial: %.5lf\n", fabs(tempoInicial));
          printf("\nTempo final: %.5lf\n", fabs(tempoFinal));
          printf("\nTempo decorrido: %.5lf\n", fabs(tempoFinal - tempoInicial)); 
     }        
    	
      MPI_Finalize();
      return 0;
    }

     

    O problema é que na hora da execução do programa no simulador na máquina virtual, eu recebo um erro, e não consigo executar o processo. Já tentei mudar várias coisas no código, mas este erro sempre persiste. 

    2022-04-14.png

×
×
  • Criar Novo...