Program obliczający całkę z wykorzystaniem OpenMP

0

Witam,
muszę stworzyć program w C++, który z wykorzystaniem OpenMP obliczy wartość całki ax^2+bx+c metodą trapezów. Napisany program uruchamia się poprawnie, tylko że całka obliczana jest kilkakrotnie i jej wynik jest źle zaokrąglony (o 2 miejsca do tyłu). Sam program całkujący działa prawidłowo. Bardzo prosiłbym o sprawdzenie kodu. Pozdrawiam.

 
#include <iomanip>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <omp.h>

using namespace std;

//*******************************
//** Tutaj definiujemy funkcję **
//*******************************

double f(double x, int a, int b, int c)
{
  return (a * pow(x, 2) + b * x + c);
}
//********************
//** Program główny **
//********************

int main()
{
const int N = 1000; //liczba punktów/trapezów podziałowych
double xp, xk, s, dx;
int a, b, c, i;


cout << setprecision(3)      // 3 cyfry po przecinku
       << fixed;               // format stałoprzecinkowy

cout << "Podaj wartosc a \n" ;
cin >> a;

cout << "Podaj wartosc b \n" ;
cin >> b;

cout << "Podaj wartosc c \n" ;
cin >> c;

cout << "f(x) = a * x * x + b * x + c x"<<endl
      << "Podaj poczatek przedzialu calkowania"<<endl
      << "xp = ";
cin >> xp;
cout << "Podaj koniec przedzialu calkowania"<<endl
      << "xk = ";
cin >> xk;

#pragma omp parallel firstprivate(xk, xp) private (dx, i, a, b, c) shared (s)
{

s  = 0;
dx = (xk - xp) / N;

#pragma omp for reduction (+:s)
for(i = 1; i < N; i++)    {

s += f(xp + i * dx, a, b, c);
s *= dx;
cout << "Wartosc calki wynosi : " << setw(8) << s
       << endl << endl;

}
}
system("pause");
  return 0;
}
0

Program jest do wyrzucenia.
Głównie przez cout w pętli for.

1 użytkowników online, w tym zalogowanych: 0, gości: 1