|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.12.2010, 10:42 | #1 |
Новичок
Джуниор
Регистрация: 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; сделать преобразования для Пожалуйста, помогите. Я уже голову себе сломала. Но принципа преобразований не пойму(( |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Друзья! Нужно сделать прогу, использующую другие файлы и поиск в коде программы!за 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 |