melotjk Posted April 15, 2022 Posted April 15, 2022 (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. Edited April 15, 2022 by melotjk Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.