Jump to content

Recommended Posts

Posted (edited)

 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

Edited by melotjk

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...