Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 10:42   #1
Юлия26
Новичок
Джуниор
 
Регистрация: 14.12.2010
Сообщений: 1
Печаль Нужно разобраться в коде программы на Си!

Преподаватель требует написать код на Си по параллельному программированию аналогично тому, как он его написал.
#include "mpi.h"
#include <stdio.h>
#include <math.h>

/// Вычисление ArcSin(x), используя его разложение в ряд Тэйлора
double Abs(double a)
{
if(a <0) return (-a);
return a;

}


int main( int argc, char *argv[])
{

int rank, np; //rank, number of processes
double myas, as; //Part of ArcSin, ArcSin
double eps, x; // argument
double startwtime = 0.0, endwtime;

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&np);
MPI_Comm_rank(MPI_COMM_WORLD,&rank) ;


if( rank == 0)
{

printf("Input x - argument od ArcSin: ((-1) - (+1)) ");
scanf("%lf",&x);
printf("Input eps - : (10^-5 - 10^-10) ");
scanf("%lf",&eps);
startwtime = MPI_Wtime();

}
MPI_Bcast(&x, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
MPI_Bcast(&eps, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);

for(int povtor = 0; povtor < 1000000; povtor++)
{
//every process evaluates myas - his part of Sum(ak) = ArcSin(x)
myas = 0.0;
//initial value of a - current number of Sum
int n = rank;
double k = 2*n +1;
double a = x/k;

double p = 1.0;
for(int i = 0; i< n; i++)
{
k = (2*i +1); p *= x*x*k/(k+1);
}
a*=p;
//printf("a0 = %f, rank = %d\n",a, rank);
while (Abs(a) > eps)
{
myas += a;
p =1.0;
for(int i = 1; i <= np; i++)
{
k = 2*(n + i);
p *= x * x *(k-1)/k;
}
a *= p*(2 * n + 1)/(2*(n + np) + 1);
n += np;
//printf("a = %f, rank = %d\n",a, rank);

}
//printf("myas = %f, rank = %d\n",myas, rank);
}
MPI_Reduce(&myas, &as, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

if (rank == 0)
{
printf("Value of ArcSin(%f) = %f\n",
x, as);
endwtime = MPI_Wtime();
printf("Time = %f\n",endwtime-startwtime);
}


MPI_Finalize();
return 0;
}

Говорит, что делает преобразования по формуле http://www.intuit.ru/img/tex/04dd607e552aa9452253eae43c40185a.pn g[/IMG]
Но, как именно он их делает не ясно.
Мне нужно аналогично части кода
double k = 2*n +1;
double a = x/k;

double p = 1.0;
for(int i = 0; i< n; i++)
{
k = (2*i +1); p *= x*x*k/(k+1);
}
a*=p;
//printf("a0 = %f, rank = %d\n",a, rank);
while (Abs(a) > eps)
{
myas += a;
p =1.0;
for(int i = 1; i <= np; i++)
{
k = 2*(n + i);
p *= x * x *(k-1)/k;
}
a *= p*(2 * n + 1)/(2*(n + np) + 1);
n += np;
сделать преобразования для
Пожалуйста, помогите. Я уже голову себе сломала. Но принципа преобразований не пойму((
Юлия26 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Друзья! Нужно сделать прогу, использующую другие файлы и поиск в коде программы!за 500р.! vny007 Фриланс 3 14.12.2010 13:29
Prolog нужно разобраться в коде Mira-girl Помощь студентам 1 11.04.2010 00:12
Помогите разобраться в коде fate Общие вопросы по Java, Java SE, Kotlin 5 17.03.2009 22:10
нужно разобраться в коде паскаля. in, out из файла [silver beast] Помощь студентам 6 22.01.2009 08:42
ПОмогите разобраться в коде программы на С++ Ajanami Помощь студентам 4 26.11.2008 15:24