7#define DOUBLE_DIGITS 20
9#define KNOWN_PRODUCT 3628800
29 double rounding_error = 1.E-9;
60 #pragma omp for schedule(dynamic,1) reduction(+:sum)
65 if (known_sum !=
sum) {
67 fprintf (stderr,
"Error in sum with integers: Result was %d"
68 " instead of %d.\n",
sum, known_sum);
76 #pragma omp for schedule(dynamic,1) reduction(-:diff)
83 fprintf (stderr,
"Error in difference with integers: Result was %d"
84 " instead of 0.\n", diff);
91 #pragma omp for schedule(dynamic,1) reduction(*:product)
97 if(known_product != product) {
99 fprintf (stderr,
"Error in Product with integers: Result was %d"
100 " instead of %d\n",product,known_product);
113 dknown_sum = (1 - dpt) / (1 - dt);
117 #pragma omp for schedule(dynamic,1) reduction(+:dsum)
122 if (fabs (dsum - dknown_sum) > rounding_error) {
124 fprintf (stderr,
"\nError in sum with doubles: Result was %f"
125 " instead of: %f (Difference: %E)\n",
126 dsum, dknown_sum, dsum-dknown_sum);
130 ddiff = (1 - dpt) / (1 - dt);
134 #pragma omp for schedule(dynamic,1) reduction(-:ddiff)
136 ddiff -= pow (dt,
j);
139 if (fabs (ddiff) > rounding_error) {
141 fprintf (stderr,
"Error in Difference with doubles: Result was %E"
142 " instead of 0.0\n", ddiff);
158 #pragma omp for schedule(dynamic,1) reduction(&&:logic_and)
160 logic_and = (logic_and && logics[
j]);
165 fprintf (stderr,
"Error in logic AND part 1\n");
174 #pragma omp for schedule(dynamic,1) reduction(&&:logic_and)
176 logic_and = logic_and && logics[
j];
181 fprintf (stderr,
"Error in logic AND part 2\n");
192 #pragma omp for schedule(dynamic,1) reduction(||:logic_or)
194 logic_or = logic_or || logics[
j];
199 fprintf (stderr,
"Error in logic OR part 1\n");
208 #pragma omp for schedule(dynamic,1) reduction(||:logic_or)
210 logic_or = logic_or || logics[
j];
215 fprintf (stderr,
"Error in logic OR part 2\n");
230 #pragma omp for schedule(dynamic,1) reduction(&:bit_and)
232 bit_and = (bit_and & logics[
j]);
237 fprintf (stderr,
"Error in BIT AND part 1\n");
246 #pragma omp for schedule(dynamic,1) reduction(&:bit_and)
248 bit_and = bit_and & logics[
j];
253 fprintf (stderr,
"Error in BIT AND part 2\n");
264 #pragma omp for schedule(dynamic,1) reduction(|:bit_or)
266 bit_or = bit_or | logics[
j];
271 fprintf (stderr,
"Error in BIT OR part 1\n");
280 #pragma omp for schedule(dynamic,1) reduction(|:bit_or)
282 bit_or = bit_or | logics[
j];
287 fprintf (stderr,
"Error in BIT OR part 2\n");
298 #pragma omp for schedule(dynamic,1) reduction(^:exclusiv_bit_or)
300 exclusiv_bit_or = exclusiv_bit_or ^ logics[
j];
303 if (exclusiv_bit_or) {
305 fprintf (stderr,
"Error in EXCLUSIV BIT OR part 1\n");
314 #pragma omp for schedule(dynamic,1) reduction(^:exclusiv_bit_or)
316 exclusiv_bit_or = exclusiv_bit_or ^ logics[
j];
319 if (!exclusiv_bit_or) {
321 fprintf (stderr,
"Error in EXCLUSIV BIT OR part 2\n");
int test_omp_for_reduction()