6#define DOUBLE_DIGITS 20
8#define KNOWN_PRODUCT 3628800
17 double rounding_error= 1.E-9;
45 #pragma omp parallel for schedule(dynamic,1) private(i) reduction(+:sum)
51 fprintf(stderr,
"Error in sum with integers: Result was %d"
52 " instead of %d\n",
sum,known_sum);
56 #pragma omp parallel for schedule(dynamic,1) private(i) reduction(-:diff)
62 fprintf(stderr,
"Error in difference with integers: Result was %d"
63 " instead of 0.\n",diff);
72 dknown_sum = (1-dpt)/(1-dt);
73 #pragma omp parallel for schedule(dynamic,1) private(i) reduction(+:dsum)
77 if( fabs(dsum-dknown_sum) > rounding_error ) {
79 fprintf(stderr,
"Error in sum with doubles: Result was %f"
80 " instead of %f (Difference: %E)\n",
81 dsum, dknown_sum, dsum-dknown_sum);
90 ddiff = (1-dpt)/(1-dt);
91 #pragma omp parallel for schedule(dynamic,1) private(i) reduction(-:ddiff)
95 if( fabs(ddiff) > rounding_error) {
97 fprintf(stderr,
"Error in Difference with doubles: Result was %E"
98 " instead of 0.0\n",ddiff);
102 #pragma omp parallel for schedule(dynamic,1) private(i) reduction(*:product)
107 if(known_product != product) {
109 fprintf(stderr,
"Error in Product with integers: Result was %d"
110 " instead of %d\n\n",product,known_product);
118 #pragma omp parallel for schedule(dynamic,1) private(i) \
119 reduction(&&:logic_and)
121 logic_and = (logic_and && logics[
i]);
125 fprintf(stderr,
"Error in logic AND part 1.\n");
131 #pragma omp parallel for schedule(dynamic,1) private(i) \
132 reduction(&&:logic_and)
134 logic_and = logic_and && logics[
i];
138 fprintf(stderr,
"Error in logic AND part 2.\n");
146 #pragma omp parallel for schedule(dynamic,1) private(i) \
147 reduction(||:logic_or)
149 logic_or = logic_or || logics[
i];
153 fprintf(stderr,
"Error in logic OR part 1.\n");
158 #pragma omp parallel for schedule(dynamic,1) private(i) \
159 reduction(||:logic_or)
161 logic_or = logic_or || logics[
i];
165 fprintf(stderr,
"Error in logic OR part 2.\n");
173 #pragma omp parallel for schedule(dynamic,1) private(i) \
176 bit_and = (bit_and & logics[
i]);
180 fprintf(stderr,
"Error in BIT AND part 1.\n");
186 #pragma omp parallel for schedule(dynamic,1) private(i) \
189 bit_and = bit_and & logics[
i];
193 fprintf(stderr,
"Error in BIT AND part 2.\n");
201 #pragma omp parallel for schedule(dynamic,1) private(i) \
204 bit_or = bit_or | logics[
i];
208 fprintf(stderr,
"Error in BIT OR part 1\n");
213 #pragma omp parallel for schedule(dynamic,1) private(i) \
216 bit_or = bit_or | logics[
i];
220 fprintf(stderr,
"Error in BIT OR part 2\n");
228 #pragma omp parallel for schedule(dynamic,1) private(i) \
229 reduction(^:exclusiv_bit_or)
231 exclusiv_bit_or = exclusiv_bit_or ^ logics[
i];
233 if(exclusiv_bit_or) {
235 fprintf(stderr,
"Error in EXCLUSIV BIT OR part 1\n");
241 #pragma omp parallel for schedule(dynamic,1) private(i) \
242 reduction(^:exclusiv_bit_or)
244 exclusiv_bit_or = exclusiv_bit_or ^ logics[
i];
246 if(!exclusiv_bit_or) {
248 fprintf(stderr,
"Error in EXCLUSIV BIT OR part 2\n");
int test_omp_parallel_for_reduction()