Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // wielomian open mp.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <conio.h>
- #include <omp.h>
- #include <malloc.h>
- #include <stdlib.h>
- #include <time.h>
- double potega(double wartosc,int potega)
- {
- double wynik = 1;
- for(int i=0;i<potega;i++)
- {
- wynik*=wartosc;
- }
- return wynik;
- }
- //x poniżej wartości 1
- //a od 1 do 10
- double metoda_bezposrednia(double x, double a[],int stopien)
- {
- double Wx=0;
- for(int i = 0;i <=stopien; i++)
- {
- Wx+=(a[i]*potega(x,i));
- }
- return Wx;
- }
- double metoda_bezposrednia_rownolegle(double x, double a[],int stopien,int watki)
- {
- double Wx=0;
- int i;
- omp_set_num_threads(watki);
- #pragma omp parallel for shared(x,a,stopien) private(i) reduction (+ : Wx)
- for( i = 0;i <=stopien; i++)
- {
- Wx+=(a[i]*potega(x,i));
- }
- return Wx;
- }
- double metoda_bezposrednia_rownolegle_ato(double x, double a[],int stopien,int watki)
- {
- double Wx=0;
- int i;
- omp_set_num_threads(watki);
- #pragma omp parallel for shared(x,a,stopien) private(i)// reduction (+ : Wx)
- for( i = 0;i <=stopien; i++)
- {
- #pragma omp atomic
- Wx+=(a[i]*potega(x,i));
- }
- return Wx;
- }
- double metoda_Hohnera(double x, double a[],int stopien)
- {
- double Wx= 0;
- for(int i=stopien;i>=0;i--)
- {
- Wx = (Wx*x + a[i]);
- }
- return Wx;
- }
- double metoda_Hohnera_rownolegle(double x, double a[],int stopien,int watki)
- {
- double Wx= 0;
- int i;
- #pragma omp parallel for shared(x,a,stopien,watki) private(i)
- for(i=stopien;i>=0;i--)
- {
- Wx = (Wx*x + a[i]);
- }
- return Wx;
- }
- double Dorn(double x, double a[],int stopien,int watki)
- {
- double Wx=0;
- double *q;
- int j,i;
- omp_set_num_threads(watki);
- q=(double*)malloc(sizeof(double)*watki);
- for(int x = 0;x<watki;x++)
- {
- q[x]=0;
- }
- #pragma omp parallel for shared(x,a,stopien,watki) private(j,i) reduction (+ : Wx)
- for(int i=0;i<watki-1;i++)
- {
- for(int j=0;j<watki-1;j++)
- {
- q[i]=a[j]*potega(x,watki*j);
- }
- Wx+=potega(x, i)*q[i]*potega(x, watki);
- }
- return Wx;
- //for( i=0;i<watki;i++)
- //{
- // //#pragma omp parallel for shared(x,a,stopien,watki) private(j)
- // for( j=0;j<watki;j++)
- // {
- // q[i]=a[j]*(potega(x,j*watki));
- // }
- // Wx+=potega(x,i)*q[i]*potega(x,watki);//q[i];
- //}
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- int watki =4;
- srand( time( NULL ));
- double r =( rand() % 10 );
- double x,start,stop,wynik=0;
- int n1,n2,n3;
- double *A1,*A2,*A3;
- printf("Podaj x z zakresu 0 do 1\n");
- scanf("%lf",&x);
- printf("Podaj 3 różne wartości N(stopień wielomianu)\n");
- scanf("%d %d %d",&n1,&n2,&n3);
- A1=(double*)malloc(sizeof(double)*n1+1);
- A2=(double*)malloc(sizeof(double)*n2+1);
- A3=(double*)malloc(sizeof(double)*n3+1);
- for(int i=0;i<=n1;i++)
- {
- A1[i]=rand() % 10;
- //printf("%lf \n",A1[i]);
- }
- for(int i=0;i<=n2;i++)
- {
- A2[i]=rand() % 10;
- //printf("%lf \n",A1[i]);
- }
- for(int i=0;i<=n3;i++)
- {
- A3[i]=rand() % 10;
- //printf("%lf \n",A1[i]);
- }
- start= omp_get_wtime();
- wynik= metoda_bezposrednia(x,A1,n1);
- stop=omp_get_wtime();
- printf("Metoda bezposrednia dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n1,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_bezposrednia(x,A2,n2);
- stop=omp_get_wtime();
- printf("Metoda bezposrednia dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n2,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_bezposrednia(x,A3,n3);
- stop=omp_get_wtime();
- printf("Metoda bezposrednia dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n3,wynik,stop-start);
- puts("//////////////////////\n");
- /////////////////////////////////////// metoda Hornera
- start= omp_get_wtime();
- wynik= metoda_Hohnera(x,A1,n1);
- stop=omp_get_wtime();
- printf("Metoda Hornera dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n1,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_Hohnera(x,A2,n2);
- stop=omp_get_wtime();
- printf("Metoda Hornera dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n2,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_Hohnera(x,A3,n3);
- stop=omp_get_wtime();
- printf("Metoda Hornera dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n3,wynik,stop-start);
- puts("//////////////////////\n");
- /////////////////////////////////////// metoda rownolegla bezposrednia
- start= omp_get_wtime();
- wynik= metoda_bezposrednia_rownolegle(x,A1,n1,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla bezposrednia dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n1,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_bezposrednia_rownolegle(x,A2,n2,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla bezposrednia dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n2,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_bezposrednia_rownolegle(x,A3,n3,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla bezposrednia dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n3,wynik,stop-start);
- //////////////dorn
- puts("//////////////////////\n");
- start= omp_get_wtime();
- wynik= metoda_bezposrednia_rownolegle_ato(x,A1,n1,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla ATO dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n1,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_bezposrednia_rownolegle_ato(x,A2,n2,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla ATO dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n2,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_bezposrednia_rownolegle_ato(x,A3,n3,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla ATO dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n3,wynik,stop-start);
- //////////////dorn
- puts("//////////////////////\n");
- /////////////////////////////////// metoda rownolegla bezposrednia
- start= omp_get_wtime();
- wynik= Dorn(x,A1,n1,watki);
- stop=omp_get_wtime();
- printf("Metoda Dorna dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n1,wynik,stop-start);
- start= omp_get_wtime();
- wynik= Dorn(x,A2,n2,watki);
- stop=omp_get_wtime();
- printf("Metoda Dorna dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n2,wynik,stop-start);
- start= omp_get_wtime();
- wynik= Dorn(x,A3,n3,watki);
- stop=omp_get_wtime();
- printf("Metoda Dorna dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n3,wynik,stop-start);
- puts("//////////////////////\n");
- ///////////
- start= omp_get_wtime();
- wynik= metoda_Hohnera_rownolegle(x,A1,n1,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla Hornera dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n1,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_Hohnera_rownolegle(x,A2,n2,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla Hornera dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n2,wynik,stop-start);
- start= omp_get_wtime();
- wynik= metoda_Hohnera_rownolegle(x,A3,n3,watki);
- stop=omp_get_wtime();
- printf("Metoda rownolegla Hornera dla wielomianu stopnia %d wynik %lf w czasie %lf\n",n3,wynik,stop-start);
- // printf("%lf",potega(5,2));
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement