File Coverage

lib/PDL/Primitive-pp-approx_artol.c
Criterion Covered Total %
statement 117 119 98.3
branch 411 780 52.6
condition n/a
subroutine n/a
pod n/a
total 528 899 58.7


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from lib/PDL/Primitive.pd! Do not modify!
5             */
6              
7             #define PDL_FREE_CODE(trans, destroy, comp_free_code, ntpriv_free_code) \
8             if (destroy) { \
9             comp_free_code \
10             } \
11             if ((trans)->dims_redone) { \
12             ntpriv_free_code \
13             }
14              
15             #include "EXTERN.h"
16             #include "perl.h"
17             #include "XSUB.h"
18             #include "pdl.h"
19             #include "pdlcore.h"
20             #define PDL PDL_Primitive
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "lib/PDL/Primitive-pp-approx_artol.c"
23             extern int pdl_srand_threads;
24             extern uint64_t *pdl_rand_state;
25             void pdl_srand(uint64_t **s, uint64_t seed, int n);
26             double pdl_drand(uint64_t *s);
27             #define PDL_MAYBE_SRAND \
28             if (pdl_srand_threads < 0) \
29             pdl_srand(&pdl_rand_state, PDL->pdl_seed(), PDL->online_cpus());
30             #define PDL_RAND_SET_OFFSET(v, thr, pdl) \
31             if (v < 0) { \
32             if (thr.mag_nthr >= 0) { \
33             int thr_no = PDL->magic_get_thread(pdl); \
34             if (thr_no < 0) return PDL->make_error_simple(PDL_EFATAL, "Invalid pdl_magic_get_thread!"); \
35             v = thr_no == 0 ? thr_no : thr_no % PDL->online_cpus(); \
36             } else { \
37             v = 0; \
38             } \
39             }
40              
41             #line 1846 "lib/PDL/PP.pm"
42             typedef struct pdl_params_approx_artol {
43             #line 44 "lib/PDL/Primitive-pp-approx_artol.c"
44             double atol;
45             double rtol;
46             } pdl_params_approx_artol;
47              
48              
49             #line 1857 "lib/PDL/PP.pm"
50             pdl_error pdl_approx_artol_readdata(pdl_trans *__privtrans) {
51             pdl_error PDL_err = {0, NULL, 0};
52             #line 53 "lib/PDL/Primitive-pp-approx_artol.c"
53 1720           pdl_params_approx_artol *__params = __privtrans->params; (void)__params;
54 1720 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in approx_artol:" "broadcast.incs NULL");
55             /* broadcastloop declarations */
56             int __brcloopval;
57             register PDL_Indx __tind0,__tind1; /* counters along dim */
58 1720           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
59             /* dims here are how many steps along those dims */
60 1720           register PDL_Indx __tinc0_got = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
61 1720           register PDL_Indx __tinc0_expected = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,0);
62 1720           register PDL_Indx __tinc0_result = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,0);
63 1720           register PDL_Indx __tinc1_got = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
64 1720           register PDL_Indx __tinc1_expected = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,1,1);
65 1720           register PDL_Indx __tinc1_result = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,2,1);
66             #define PDL_BROADCASTLOOP_START_approx_artol_readdata PDL_BROADCASTLOOP_START( \
67             readdata, \
68             __privtrans->broadcast, \
69             __privtrans->vtable, \
70             got_datap += __offsp[0]; \
71             expected_datap += __offsp[1]; \
72             result_datap += __offsp[2]; \
73             , \
74             ( ,got_datap += __tinc1_got - __tinc0_got * __tdims0 \
75             ,expected_datap += __tinc1_expected - __tinc0_expected * __tdims0 \
76             ,result_datap += __tinc1_result - __tinc0_result * __tdims0 \
77             ), \
78             ( ,got_datap += __tinc0_got \
79             ,expected_datap += __tinc0_expected \
80             ,result_datap += __tinc0_result \
81             ) \
82             )
83             #define PDL_BROADCASTLOOP_END_approx_artol_readdata PDL_BROADCASTLOOP_END( \
84             __privtrans->broadcast, \
85             got_datap -= __tinc1_got * __tdims1 + __offsp[0]; \
86             expected_datap -= __tinc1_expected * __tdims1 + __offsp[1]; \
87             result_datap -= __tinc1_result * __tdims1 + __offsp[2]; \
88             )
89             #ifndef PDL_DECLARE_PARAMS_approx_artol_1
90             #define PDL_DECLARE_PARAMS_approx_artol_1(PDL_TYPE_OP,PDL_PPSYM_OP,PDL_TYPE_PARAM_result,PDL_PPSYM_PARAM_result) \
91             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, got, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP) \
92             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_OP, expected, (__privtrans->pdls[1]), 1, PDL_PPSYM_OP) \
93             PDL_DECLARE_PARAMETER_BADVAL(PDL_TYPE_PARAM_result, result, (__privtrans->pdls[2]), 1, PDL_PPSYM_PARAM_result)
94             #endif
95 1720 100         if ( __privtrans->bvalflag ) { /* ** do 'bad' Code ** */
96             #define PDL_BAD_CODE
97             #define PDL_IF_BAD(t,f) t
98 302           switch (__privtrans->__datatype) { /* Start generic switch */
99 11           case PDL_SB: {
100             #define PDL_IF_GENTYPE_INTEGER(t,f) t
101             #define PDL_IF_GENTYPE_REAL(t,f) t
102             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
103 11 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_SByte,A,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
104             {
105             #line 3504 "lib/PDL/Primitive.pd"
106             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
107             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
108             PDL_BROADCASTLOOP_START_approx_artol_readdata
109             #line 3507 "lib/PDL/Primitive.pd"
110             PDL_SByte expctd = (expected_datap)[0];
111             if (PDL_ISNAN_A((got_datap)[0]) && PDL_ISNAN_A(expctd)) { (result_datap)[0] = 1; continue; }
112             if (PDL_ISNAN_A((got_datap)[0]) || PDL_ISNAN_A(expctd)) { (result_datap)[0] = 0; continue; }
113             PDL_IF_BAD(
114             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,A,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,A,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
115             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,A,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,A,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
116             ,)
117             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
118             PDL_SByte diff = (got_datap)[0] - expctd;
119             double abs_diff2 = PDL_IF_GENTYPE_REAL(
120             diff * diff,
121             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
122             );
123             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
124             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
125             expctd * expctd,
126             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
127             );
128             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
129             (result_datap)[0] = 0;
130             PDL_BROADCASTLOOP_END_approx_artol_readdata
131             #line 132 "lib/PDL/Primitive-pp-approx_artol.c"
132             }
133             #undef PDL_IF_GENTYPE_INTEGER
134             #undef PDL_IF_GENTYPE_REAL
135             #undef PDL_IF_GENTYPE_UNSIGNED
136 11           } break;
137 15           case PDL_B: {
138             #define PDL_IF_GENTYPE_INTEGER(t,f) t
139             #define PDL_IF_GENTYPE_REAL(t,f) t
140             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
141 15 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Byte,B,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
142             {
143             #line 3504 "lib/PDL/Primitive.pd"
144             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
145             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
146             PDL_BROADCASTLOOP_START_approx_artol_readdata
147             #line 3507 "lib/PDL/Primitive.pd"
148             PDL_Byte expctd = (expected_datap)[0];
149             if (PDL_ISNAN_B((got_datap)[0]) && PDL_ISNAN_B(expctd)) { (result_datap)[0] = 1; continue; }
150             if (PDL_ISNAN_B((got_datap)[0]) || PDL_ISNAN_B(expctd)) { (result_datap)[0] = 0; continue; }
151             PDL_IF_BAD(
152             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,B,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,B,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
153             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,B,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,B,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
154             ,)
155             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
156             PDL_Byte diff = (got_datap)[0] - expctd;
157             double abs_diff2 = PDL_IF_GENTYPE_REAL(
158             diff * diff,
159             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
160             );
161             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
162             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
163             expctd * expctd,
164             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
165             );
166             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
167             (result_datap)[0] = 0;
168             PDL_BROADCASTLOOP_END_approx_artol_readdata
169             #line 170 "lib/PDL/Primitive-pp-approx_artol.c"
170             }
171             #undef PDL_IF_GENTYPE_INTEGER
172             #undef PDL_IF_GENTYPE_REAL
173             #undef PDL_IF_GENTYPE_UNSIGNED
174 15           } break;
175 11           case PDL_S: {
176             #define PDL_IF_GENTYPE_INTEGER(t,f) t
177             #define PDL_IF_GENTYPE_REAL(t,f) t
178             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
179 11 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Short,S,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
180             {
181             #line 3504 "lib/PDL/Primitive.pd"
182             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
183             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
184             PDL_BROADCASTLOOP_START_approx_artol_readdata
185             #line 3507 "lib/PDL/Primitive.pd"
186             PDL_Short expctd = (expected_datap)[0];
187             if (PDL_ISNAN_S((got_datap)[0]) && PDL_ISNAN_S(expctd)) { (result_datap)[0] = 1; continue; }
188             if (PDL_ISNAN_S((got_datap)[0]) || PDL_ISNAN_S(expctd)) { (result_datap)[0] = 0; continue; }
189             PDL_IF_BAD(
190             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,S,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,S,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
191             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,S,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,S,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
192             ,)
193             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
194             PDL_Short diff = (got_datap)[0] - expctd;
195             double abs_diff2 = PDL_IF_GENTYPE_REAL(
196             diff * diff,
197             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
198             );
199             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
200             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
201             expctd * expctd,
202             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
203             );
204             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
205             (result_datap)[0] = 0;
206             PDL_BROADCASTLOOP_END_approx_artol_readdata
207             #line 208 "lib/PDL/Primitive-pp-approx_artol.c"
208             }
209             #undef PDL_IF_GENTYPE_INTEGER
210             #undef PDL_IF_GENTYPE_REAL
211             #undef PDL_IF_GENTYPE_UNSIGNED
212 11           } break;
213 15           case PDL_US: {
214             #define PDL_IF_GENTYPE_INTEGER(t,f) t
215             #define PDL_IF_GENTYPE_REAL(t,f) t
216             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
217 15 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Ushort,U,PDL_SByte,A)
    50          
    50          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
218             {
219             #line 3504 "lib/PDL/Primitive.pd"
220             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
221             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
222             PDL_BROADCASTLOOP_START_approx_artol_readdata
223             #line 3507 "lib/PDL/Primitive.pd"
224             PDL_Ushort expctd = (expected_datap)[0];
225             if (PDL_ISNAN_U((got_datap)[0]) && PDL_ISNAN_U(expctd)) { (result_datap)[0] = 1; continue; }
226             if (PDL_ISNAN_U((got_datap)[0]) || PDL_ISNAN_U(expctd)) { (result_datap)[0] = 0; continue; }
227             PDL_IF_BAD(
228             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,U,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,U,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
229             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,U,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,U,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
230             ,)
231             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
232             PDL_Ushort diff = (got_datap)[0] - expctd;
233             double abs_diff2 = PDL_IF_GENTYPE_REAL(
234             diff * diff,
235             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
236             );
237             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
238             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
239             expctd * expctd,
240             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
241             );
242             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
243             (result_datap)[0] = 0;
244             PDL_BROADCASTLOOP_END_approx_artol_readdata
245             #line 246 "lib/PDL/Primitive-pp-approx_artol.c"
246             }
247             #undef PDL_IF_GENTYPE_INTEGER
248             #undef PDL_IF_GENTYPE_REAL
249             #undef PDL_IF_GENTYPE_UNSIGNED
250 15           } break;
251 24           case PDL_L: {
252             #define PDL_IF_GENTYPE_INTEGER(t,f) t
253             #define PDL_IF_GENTYPE_REAL(t,f) t
254             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
255 24 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Long,L,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
256             {
257             #line 3504 "lib/PDL/Primitive.pd"
258             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
259             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
260             PDL_BROADCASTLOOP_START_approx_artol_readdata
261             #line 3507 "lib/PDL/Primitive.pd"
262             PDL_Long expctd = (expected_datap)[0];
263             if (PDL_ISNAN_L((got_datap)[0]) && PDL_ISNAN_L(expctd)) { (result_datap)[0] = 1; continue; }
264             if (PDL_ISNAN_L((got_datap)[0]) || PDL_ISNAN_L(expctd)) { (result_datap)[0] = 0; continue; }
265             PDL_IF_BAD(
266             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,L,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,L,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
267             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,L,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,L,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
268             ,)
269             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
270             PDL_Long diff = (got_datap)[0] - expctd;
271             double abs_diff2 = PDL_IF_GENTYPE_REAL(
272             diff * diff,
273             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
274             );
275             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
276             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
277             expctd * expctd,
278             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
279             );
280             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
281             (result_datap)[0] = 0;
282             PDL_BROADCASTLOOP_END_approx_artol_readdata
283             #line 284 "lib/PDL/Primitive-pp-approx_artol.c"
284             }
285             #undef PDL_IF_GENTYPE_INTEGER
286             #undef PDL_IF_GENTYPE_REAL
287             #undef PDL_IF_GENTYPE_UNSIGNED
288 24           } break;
289 9           case PDL_UL: {
290             #define PDL_IF_GENTYPE_INTEGER(t,f) t
291             #define PDL_IF_GENTYPE_REAL(t,f) t
292             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
293 9 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_ULong,K,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
294             {
295             #line 3504 "lib/PDL/Primitive.pd"
296             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
297             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
298             PDL_BROADCASTLOOP_START_approx_artol_readdata
299             #line 3507 "lib/PDL/Primitive.pd"
300             PDL_ULong expctd = (expected_datap)[0];
301             if (PDL_ISNAN_K((got_datap)[0]) && PDL_ISNAN_K(expctd)) { (result_datap)[0] = 1; continue; }
302             if (PDL_ISNAN_K((got_datap)[0]) || PDL_ISNAN_K(expctd)) { (result_datap)[0] = 0; continue; }
303             PDL_IF_BAD(
304             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,K,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,K,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
305             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,K,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,K,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
306             ,)
307             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
308             PDL_ULong diff = (got_datap)[0] - expctd;
309             double abs_diff2 = PDL_IF_GENTYPE_REAL(
310             diff * diff,
311             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
312             );
313             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
314             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
315             expctd * expctd,
316             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
317             );
318             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
319             (result_datap)[0] = 0;
320             PDL_BROADCASTLOOP_END_approx_artol_readdata
321             #line 322 "lib/PDL/Primitive-pp-approx_artol.c"
322             }
323             #undef PDL_IF_GENTYPE_INTEGER
324             #undef PDL_IF_GENTYPE_REAL
325             #undef PDL_IF_GENTYPE_UNSIGNED
326 9           } break;
327 29           case PDL_IND: {
328             #define PDL_IF_GENTYPE_INTEGER(t,f) t
329             #define PDL_IF_GENTYPE_REAL(t,f) t
330             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
331 29 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Indx,N,PDL_SByte,A)
    50          
    50          
    50          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
332             {
333             #line 3504 "lib/PDL/Primitive.pd"
334             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
335             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
336             PDL_BROADCASTLOOP_START_approx_artol_readdata
337             #line 3507 "lib/PDL/Primitive.pd"
338             PDL_Indx expctd = (expected_datap)[0];
339             if (PDL_ISNAN_N((got_datap)[0]) && PDL_ISNAN_N(expctd)) { (result_datap)[0] = 1; continue; }
340             if (PDL_ISNAN_N((got_datap)[0]) || PDL_ISNAN_N(expctd)) { (result_datap)[0] = 0; continue; }
341             PDL_IF_BAD(
342             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,N,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,N,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
343             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,N,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,N,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
344             ,)
345             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
346             PDL_Indx diff = (got_datap)[0] - expctd;
347             double abs_diff2 = PDL_IF_GENTYPE_REAL(
348             diff * diff,
349             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
350             );
351             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
352             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
353             expctd * expctd,
354             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
355             );
356             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
357             (result_datap)[0] = 0;
358             PDL_BROADCASTLOOP_END_approx_artol_readdata
359             #line 360 "lib/PDL/Primitive-pp-approx_artol.c"
360             }
361             #undef PDL_IF_GENTYPE_INTEGER
362             #undef PDL_IF_GENTYPE_REAL
363             #undef PDL_IF_GENTYPE_UNSIGNED
364 29           } break;
365 9           case PDL_ULL: {
366             #define PDL_IF_GENTYPE_INTEGER(t,f) t
367             #define PDL_IF_GENTYPE_REAL(t,f) t
368             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
369 9 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_ULongLong,P,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
370             {
371             #line 3504 "lib/PDL/Primitive.pd"
372             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
373             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
374             PDL_BROADCASTLOOP_START_approx_artol_readdata
375             #line 3507 "lib/PDL/Primitive.pd"
376             PDL_ULongLong expctd = (expected_datap)[0];
377             if (PDL_ISNAN_P((got_datap)[0]) && PDL_ISNAN_P(expctd)) { (result_datap)[0] = 1; continue; }
378             if (PDL_ISNAN_P((got_datap)[0]) || PDL_ISNAN_P(expctd)) { (result_datap)[0] = 0; continue; }
379             PDL_IF_BAD(
380             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,P,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,P,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
381             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,P,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,P,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
382             ,)
383             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
384             PDL_ULongLong diff = (got_datap)[0] - expctd;
385             double abs_diff2 = PDL_IF_GENTYPE_REAL(
386             diff * diff,
387             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
388             );
389             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
390             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
391             expctd * expctd,
392             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
393             );
394             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
395             (result_datap)[0] = 0;
396             PDL_BROADCASTLOOP_END_approx_artol_readdata
397             #line 398 "lib/PDL/Primitive-pp-approx_artol.c"
398             }
399             #undef PDL_IF_GENTYPE_INTEGER
400             #undef PDL_IF_GENTYPE_REAL
401             #undef PDL_IF_GENTYPE_UNSIGNED
402 9           } break;
403 9           case PDL_LL: {
404             #define PDL_IF_GENTYPE_INTEGER(t,f) t
405             #define PDL_IF_GENTYPE_REAL(t,f) t
406             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
407 9 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_LongLong,Q,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
408             {
409             #line 3504 "lib/PDL/Primitive.pd"
410             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
411             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
412             PDL_BROADCASTLOOP_START_approx_artol_readdata
413             #line 3507 "lib/PDL/Primitive.pd"
414             PDL_LongLong expctd = (expected_datap)[0];
415             if (PDL_ISNAN_Q((got_datap)[0]) && PDL_ISNAN_Q(expctd)) { (result_datap)[0] = 1; continue; }
416             if (PDL_ISNAN_Q((got_datap)[0]) || PDL_ISNAN_Q(expctd)) { (result_datap)[0] = 0; continue; }
417             PDL_IF_BAD(
418             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,Q,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,Q,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
419             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,Q,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,Q,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
420             ,)
421             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
422             PDL_LongLong diff = (got_datap)[0] - expctd;
423             double abs_diff2 = PDL_IF_GENTYPE_REAL(
424             diff * diff,
425             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
426             );
427             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
428             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
429             expctd * expctd,
430             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
431             );
432             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
433             (result_datap)[0] = 0;
434             PDL_BROADCASTLOOP_END_approx_artol_readdata
435             #line 436 "lib/PDL/Primitive-pp-approx_artol.c"
436             }
437             #undef PDL_IF_GENTYPE_INTEGER
438             #undef PDL_IF_GENTYPE_REAL
439             #undef PDL_IF_GENTYPE_UNSIGNED
440 9           } break;
441 14           case PDL_F: {
442             #define PDL_IF_GENTYPE_INTEGER(t,f) f
443             #define PDL_IF_GENTYPE_REAL(t,f) t
444             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
445 14 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Float,F,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
446             {
447             #line 3504 "lib/PDL/Primitive.pd"
448             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
449             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
450             PDL_BROADCASTLOOP_START_approx_artol_readdata
451             #line 3507 "lib/PDL/Primitive.pd"
452             PDL_Float expctd = (expected_datap)[0];
453             if (PDL_ISNAN_F((got_datap)[0]) && PDL_ISNAN_F(expctd)) { (result_datap)[0] = 1; continue; }
454             if (PDL_ISNAN_F((got_datap)[0]) || PDL_ISNAN_F(expctd)) { (result_datap)[0] = 0; continue; }
455             PDL_IF_BAD(
456             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,F,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,F,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
457             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,F,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,F,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
458             ,)
459             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
460             PDL_Float diff = (got_datap)[0] - expctd;
461             double abs_diff2 = PDL_IF_GENTYPE_REAL(
462             diff * diff,
463             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
464             );
465             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
466             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
467             expctd * expctd,
468             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
469             );
470             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
471             (result_datap)[0] = 0;
472             PDL_BROADCASTLOOP_END_approx_artol_readdata
473             #line 474 "lib/PDL/Primitive-pp-approx_artol.c"
474             }
475             #undef PDL_IF_GENTYPE_INTEGER
476             #undef PDL_IF_GENTYPE_REAL
477             #undef PDL_IF_GENTYPE_UNSIGNED
478 14           } break;
479 119           case PDL_D: {
480             #define PDL_IF_GENTYPE_INTEGER(t,f) f
481             #define PDL_IF_GENTYPE_REAL(t,f) t
482             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
483 119 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Double,D,PDL_SByte,A)
    50          
    50          
    100          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
484             {
485             #line 3504 "lib/PDL/Primitive.pd"
486             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
487             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
488             PDL_BROADCASTLOOP_START_approx_artol_readdata
489             #line 3507 "lib/PDL/Primitive.pd"
490             PDL_Double expctd = (expected_datap)[0];
491             if (PDL_ISNAN_D((got_datap)[0]) && PDL_ISNAN_D(expctd)) { (result_datap)[0] = 1; continue; }
492             if (PDL_ISNAN_D((got_datap)[0]) || PDL_ISNAN_D(expctd)) { (result_datap)[0] = 0; continue; }
493             PDL_IF_BAD(
494             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,D,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,D,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
495             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,D,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,D,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
496             ,)
497             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
498             PDL_Double diff = (got_datap)[0] - expctd;
499             double abs_diff2 = PDL_IF_GENTYPE_REAL(
500             diff * diff,
501             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
502             );
503             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
504             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
505             expctd * expctd,
506             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
507             );
508             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
509             (result_datap)[0] = 0;
510             PDL_BROADCASTLOOP_END_approx_artol_readdata
511             #line 512 "lib/PDL/Primitive-pp-approx_artol.c"
512             }
513             #undef PDL_IF_GENTYPE_INTEGER
514             #undef PDL_IF_GENTYPE_REAL
515             #undef PDL_IF_GENTYPE_UNSIGNED
516 119           } break;
517 9           case PDL_LD: {
518             #define PDL_IF_GENTYPE_INTEGER(t,f) f
519             #define PDL_IF_GENTYPE_REAL(t,f) t
520             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
521 9 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_LDouble,E,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
522             {
523             #line 3504 "lib/PDL/Primitive.pd"
524             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
525             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
526             PDL_BROADCASTLOOP_START_approx_artol_readdata
527             #line 3507 "lib/PDL/Primitive.pd"
528             PDL_LDouble expctd = (expected_datap)[0];
529             if (PDL_ISNAN_E((got_datap)[0]) && PDL_ISNAN_E(expctd)) { (result_datap)[0] = 1; continue; }
530             if (PDL_ISNAN_E((got_datap)[0]) || PDL_ISNAN_E(expctd)) { (result_datap)[0] = 0; continue; }
531             PDL_IF_BAD(
532             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,E,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,E,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
533             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,E,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,E,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
534             ,)
535             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
536             PDL_LDouble diff = (got_datap)[0] - expctd;
537             double abs_diff2 = PDL_IF_GENTYPE_REAL(
538             diff * diff,
539             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
540             );
541             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
542             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
543             expctd * expctd,
544             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
545             );
546             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
547             (result_datap)[0] = 0;
548             PDL_BROADCASTLOOP_END_approx_artol_readdata
549             #line 550 "lib/PDL/Primitive-pp-approx_artol.c"
550             }
551             #undef PDL_IF_GENTYPE_INTEGER
552             #undef PDL_IF_GENTYPE_REAL
553             #undef PDL_IF_GENTYPE_UNSIGNED
554 9           } break;
555 9           case PDL_CF: {
556             #define PDL_IF_GENTYPE_INTEGER(t,f) f
557             #define PDL_IF_GENTYPE_REAL(t,f) f
558             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
559 9 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_CFloat,G,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
560             {
561             #line 3504 "lib/PDL/Primitive.pd"
562             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
563             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
564             PDL_BROADCASTLOOP_START_approx_artol_readdata
565             #line 3507 "lib/PDL/Primitive.pd"
566             PDL_CFloat expctd = (expected_datap)[0];
567             if (PDL_ISNAN_G((got_datap)[0]) && PDL_ISNAN_G(expctd)) { (result_datap)[0] = 1; continue; }
568             if (PDL_ISNAN_G((got_datap)[0]) || PDL_ISNAN_G(expctd)) { (result_datap)[0] = 0; continue; }
569             PDL_IF_BAD(
570             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,G,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,G,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
571             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,G,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,G,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
572             ,)
573             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
574             PDL_CFloat diff = (got_datap)[0] - expctd;
575             double abs_diff2 = PDL_IF_GENTYPE_REAL(
576             diff * diff,
577             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
578             );
579             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
580             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
581             expctd * expctd,
582             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
583             );
584             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
585             (result_datap)[0] = 0;
586             PDL_BROADCASTLOOP_END_approx_artol_readdata
587             #line 588 "lib/PDL/Primitive-pp-approx_artol.c"
588             }
589             #undef PDL_IF_GENTYPE_INTEGER
590             #undef PDL_IF_GENTYPE_REAL
591             #undef PDL_IF_GENTYPE_UNSIGNED
592 9           } break;
593 10           case PDL_CD: {
594             #define PDL_IF_GENTYPE_INTEGER(t,f) f
595             #define PDL_IF_GENTYPE_REAL(t,f) f
596             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
597 10 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_CDouble,C,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
598             {
599             #line 3504 "lib/PDL/Primitive.pd"
600             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
601             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
602             PDL_BROADCASTLOOP_START_approx_artol_readdata
603             #line 3507 "lib/PDL/Primitive.pd"
604             PDL_CDouble expctd = (expected_datap)[0];
605             if (PDL_ISNAN_C((got_datap)[0]) && PDL_ISNAN_C(expctd)) { (result_datap)[0] = 1; continue; }
606             if (PDL_ISNAN_C((got_datap)[0]) || PDL_ISNAN_C(expctd)) { (result_datap)[0] = 0; continue; }
607             PDL_IF_BAD(
608             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,C,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,C,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
609             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,C,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,C,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
610             ,)
611             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
612             PDL_CDouble diff = (got_datap)[0] - expctd;
613             double abs_diff2 = PDL_IF_GENTYPE_REAL(
614             diff * diff,
615             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
616             );
617             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
618             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
619             expctd * expctd,
620             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
621             );
622             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
623             (result_datap)[0] = 0;
624             PDL_BROADCASTLOOP_END_approx_artol_readdata
625             #line 626 "lib/PDL/Primitive-pp-approx_artol.c"
626             }
627             #undef PDL_IF_GENTYPE_INTEGER
628             #undef PDL_IF_GENTYPE_REAL
629             #undef PDL_IF_GENTYPE_UNSIGNED
630 10           } break;
631 9           case PDL_CLD: {
632             #define PDL_IF_GENTYPE_INTEGER(t,f) f
633             #define PDL_IF_GENTYPE_REAL(t,f) f
634             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
635 9 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_CLDouble,H,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
636             {
637             #line 3504 "lib/PDL/Primitive.pd"
638             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
639             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
640             PDL_BROADCASTLOOP_START_approx_artol_readdata
641             #line 3507 "lib/PDL/Primitive.pd"
642             PDL_CLDouble expctd = (expected_datap)[0];
643             if (PDL_ISNAN_H((got_datap)[0]) && PDL_ISNAN_H(expctd)) { (result_datap)[0] = 1; continue; }
644             if (PDL_ISNAN_H((got_datap)[0]) || PDL_ISNAN_H(expctd)) { (result_datap)[0] = 0; continue; }
645             PDL_IF_BAD(
646             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,H,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,H,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
647             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,H,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,H,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
648             ,)
649             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
650             PDL_CLDouble diff = (got_datap)[0] - expctd;
651             double abs_diff2 = PDL_IF_GENTYPE_REAL(
652             diff * diff,
653             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
654             );
655             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
656             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
657             expctd * expctd,
658             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
659             );
660             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
661             (result_datap)[0] = 0;
662             PDL_BROADCASTLOOP_END_approx_artol_readdata
663             #line 664 "lib/PDL/Primitive-pp-approx_artol.c"
664             }
665             #undef PDL_IF_GENTYPE_INTEGER
666             #undef PDL_IF_GENTYPE_REAL
667             #undef PDL_IF_GENTYPE_UNSIGNED
668 9           } break;
669 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in approx_artol: unhandled datatype(%d), only handles (ABSULKNPQFDEGCH)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
670             }
671             #undef PDL_BAD_CODE
672             #undef PDL_IF_BAD
673             } else { /* ** else do 'good' Code ** */
674             #define PDL_IF_BAD(t,f) f
675 1418           switch (__privtrans->__datatype) { /* Start generic switch */
676 7           case PDL_SB: {
677             #define PDL_IF_GENTYPE_INTEGER(t,f) t
678             #define PDL_IF_GENTYPE_REAL(t,f) t
679             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
680 7 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_SByte,A,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
681             {
682             #line 3504 "lib/PDL/Primitive.pd"
683             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
684             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
685             PDL_BROADCASTLOOP_START_approx_artol_readdata
686             #line 3507 "lib/PDL/Primitive.pd"
687             PDL_SByte expctd = (expected_datap)[0];
688             if (PDL_ISNAN_A((got_datap)[0]) && PDL_ISNAN_A(expctd)) { (result_datap)[0] = 1; continue; }
689             if (PDL_ISNAN_A((got_datap)[0]) || PDL_ISNAN_A(expctd)) { (result_datap)[0] = 0; continue; }
690             PDL_IF_BAD(
691             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,A,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,A,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
692             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,A,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,A,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
693             ,)
694             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
695             PDL_SByte diff = (got_datap)[0] - expctd;
696             double abs_diff2 = PDL_IF_GENTYPE_REAL(
697             diff * diff,
698             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
699             );
700             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
701             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
702             expctd * expctd,
703             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
704             );
705             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
706             (result_datap)[0] = 0;
707             PDL_BROADCASTLOOP_END_approx_artol_readdata
708             #line 709 "lib/PDL/Primitive-pp-approx_artol.c"
709             }
710             #undef PDL_IF_GENTYPE_INTEGER
711             #undef PDL_IF_GENTYPE_REAL
712             #undef PDL_IF_GENTYPE_UNSIGNED
713 7           } break;
714 49           case PDL_B: {
715             #define PDL_IF_GENTYPE_INTEGER(t,f) t
716             #define PDL_IF_GENTYPE_REAL(t,f) t
717             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
718 49 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Byte,B,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
719             {
720             #line 3504 "lib/PDL/Primitive.pd"
721             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
722             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
723             PDL_BROADCASTLOOP_START_approx_artol_readdata
724             #line 3507 "lib/PDL/Primitive.pd"
725             PDL_Byte expctd = (expected_datap)[0];
726             if (PDL_ISNAN_B((got_datap)[0]) && PDL_ISNAN_B(expctd)) { (result_datap)[0] = 1; continue; }
727             if (PDL_ISNAN_B((got_datap)[0]) || PDL_ISNAN_B(expctd)) { (result_datap)[0] = 0; continue; }
728             PDL_IF_BAD(
729             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,B,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,B,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
730             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,B,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,B,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
731             ,)
732             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
733             PDL_Byte diff = (got_datap)[0] - expctd;
734             double abs_diff2 = PDL_IF_GENTYPE_REAL(
735             diff * diff,
736             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
737             );
738             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
739             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
740             expctd * expctd,
741             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
742             );
743             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
744             (result_datap)[0] = 0;
745             PDL_BROADCASTLOOP_END_approx_artol_readdata
746             #line 747 "lib/PDL/Primitive-pp-approx_artol.c"
747             }
748             #undef PDL_IF_GENTYPE_INTEGER
749             #undef PDL_IF_GENTYPE_REAL
750             #undef PDL_IF_GENTYPE_UNSIGNED
751 49           } break;
752 11           case PDL_S: {
753             #define PDL_IF_GENTYPE_INTEGER(t,f) t
754             #define PDL_IF_GENTYPE_REAL(t,f) t
755             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
756 11 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Short,S,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
757             {
758             #line 3504 "lib/PDL/Primitive.pd"
759             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
760             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
761             PDL_BROADCASTLOOP_START_approx_artol_readdata
762             #line 3507 "lib/PDL/Primitive.pd"
763             PDL_Short expctd = (expected_datap)[0];
764             if (PDL_ISNAN_S((got_datap)[0]) && PDL_ISNAN_S(expctd)) { (result_datap)[0] = 1; continue; }
765             if (PDL_ISNAN_S((got_datap)[0]) || PDL_ISNAN_S(expctd)) { (result_datap)[0] = 0; continue; }
766             PDL_IF_BAD(
767             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,S,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,S,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
768             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,S,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,S,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
769             ,)
770             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
771             PDL_Short diff = (got_datap)[0] - expctd;
772             double abs_diff2 = PDL_IF_GENTYPE_REAL(
773             diff * diff,
774             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
775             );
776             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
777             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
778             expctd * expctd,
779             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
780             );
781             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
782             (result_datap)[0] = 0;
783             PDL_BROADCASTLOOP_END_approx_artol_readdata
784             #line 785 "lib/PDL/Primitive-pp-approx_artol.c"
785             }
786             #undef PDL_IF_GENTYPE_INTEGER
787             #undef PDL_IF_GENTYPE_REAL
788             #undef PDL_IF_GENTYPE_UNSIGNED
789 11           } break;
790 27           case PDL_US: {
791             #define PDL_IF_GENTYPE_INTEGER(t,f) t
792             #define PDL_IF_GENTYPE_REAL(t,f) t
793             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
794 27 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Ushort,U,PDL_SByte,A)
    50          
    50          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
795             {
796             #line 3504 "lib/PDL/Primitive.pd"
797             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
798             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
799             PDL_BROADCASTLOOP_START_approx_artol_readdata
800             #line 3507 "lib/PDL/Primitive.pd"
801             PDL_Ushort expctd = (expected_datap)[0];
802             if (PDL_ISNAN_U((got_datap)[0]) && PDL_ISNAN_U(expctd)) { (result_datap)[0] = 1; continue; }
803             if (PDL_ISNAN_U((got_datap)[0]) || PDL_ISNAN_U(expctd)) { (result_datap)[0] = 0; continue; }
804             PDL_IF_BAD(
805             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,U,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,U,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
806             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,U,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,U,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
807             ,)
808             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
809             PDL_Ushort diff = (got_datap)[0] - expctd;
810             double abs_diff2 = PDL_IF_GENTYPE_REAL(
811             diff * diff,
812             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
813             );
814             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
815             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
816             expctd * expctd,
817             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
818             );
819             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
820             (result_datap)[0] = 0;
821             PDL_BROADCASTLOOP_END_approx_artol_readdata
822             #line 823 "lib/PDL/Primitive-pp-approx_artol.c"
823             }
824             #undef PDL_IF_GENTYPE_INTEGER
825             #undef PDL_IF_GENTYPE_REAL
826             #undef PDL_IF_GENTYPE_UNSIGNED
827 27           } break;
828 42           case PDL_L: {
829             #define PDL_IF_GENTYPE_INTEGER(t,f) t
830             #define PDL_IF_GENTYPE_REAL(t,f) t
831             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
832 42 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Long,L,PDL_SByte,A)
    50          
    50          
    50          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
833             {
834             #line 3504 "lib/PDL/Primitive.pd"
835             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
836             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
837             PDL_BROADCASTLOOP_START_approx_artol_readdata
838             #line 3507 "lib/PDL/Primitive.pd"
839             PDL_Long expctd = (expected_datap)[0];
840             if (PDL_ISNAN_L((got_datap)[0]) && PDL_ISNAN_L(expctd)) { (result_datap)[0] = 1; continue; }
841             if (PDL_ISNAN_L((got_datap)[0]) || PDL_ISNAN_L(expctd)) { (result_datap)[0] = 0; continue; }
842             PDL_IF_BAD(
843             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,L,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,L,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
844             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,L,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,L,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
845             ,)
846             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
847             PDL_Long diff = (got_datap)[0] - expctd;
848             double abs_diff2 = PDL_IF_GENTYPE_REAL(
849             diff * diff,
850             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
851             );
852             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
853             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
854             expctd * expctd,
855             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
856             );
857             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
858             (result_datap)[0] = 0;
859             PDL_BROADCASTLOOP_END_approx_artol_readdata
860             #line 861 "lib/PDL/Primitive-pp-approx_artol.c"
861             }
862             #undef PDL_IF_GENTYPE_INTEGER
863             #undef PDL_IF_GENTYPE_REAL
864             #undef PDL_IF_GENTYPE_UNSIGNED
865 42           } break;
866 1           case PDL_UL: {
867             #define PDL_IF_GENTYPE_INTEGER(t,f) t
868             #define PDL_IF_GENTYPE_REAL(t,f) t
869             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
870 1 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_ULong,K,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
871             {
872             #line 3504 "lib/PDL/Primitive.pd"
873             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
874             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
875             PDL_BROADCASTLOOP_START_approx_artol_readdata
876             #line 3507 "lib/PDL/Primitive.pd"
877             PDL_ULong expctd = (expected_datap)[0];
878             if (PDL_ISNAN_K((got_datap)[0]) && PDL_ISNAN_K(expctd)) { (result_datap)[0] = 1; continue; }
879             if (PDL_ISNAN_K((got_datap)[0]) || PDL_ISNAN_K(expctd)) { (result_datap)[0] = 0; continue; }
880             PDL_IF_BAD(
881             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,K,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,K,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
882             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,K,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,K,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
883             ,)
884             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
885             PDL_ULong diff = (got_datap)[0] - expctd;
886             double abs_diff2 = PDL_IF_GENTYPE_REAL(
887             diff * diff,
888             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
889             );
890             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
891             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
892             expctd * expctd,
893             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
894             );
895             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
896             (result_datap)[0] = 0;
897             PDL_BROADCASTLOOP_END_approx_artol_readdata
898             #line 899 "lib/PDL/Primitive-pp-approx_artol.c"
899             }
900             #undef PDL_IF_GENTYPE_INTEGER
901             #undef PDL_IF_GENTYPE_REAL
902             #undef PDL_IF_GENTYPE_UNSIGNED
903 1           } break;
904 123           case PDL_IND: {
905             #define PDL_IF_GENTYPE_INTEGER(t,f) t
906             #define PDL_IF_GENTYPE_REAL(t,f) t
907             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
908 123 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Indx,N,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
909             {
910             #line 3504 "lib/PDL/Primitive.pd"
911             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
912             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
913             PDL_BROADCASTLOOP_START_approx_artol_readdata
914             #line 3507 "lib/PDL/Primitive.pd"
915             PDL_Indx expctd = (expected_datap)[0];
916             if (PDL_ISNAN_N((got_datap)[0]) && PDL_ISNAN_N(expctd)) { (result_datap)[0] = 1; continue; }
917             if (PDL_ISNAN_N((got_datap)[0]) || PDL_ISNAN_N(expctd)) { (result_datap)[0] = 0; continue; }
918             PDL_IF_BAD(
919             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,N,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,N,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
920             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,N,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,N,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
921             ,)
922             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
923             PDL_Indx diff = (got_datap)[0] - expctd;
924             double abs_diff2 = PDL_IF_GENTYPE_REAL(
925             diff * diff,
926             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
927             );
928             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
929             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
930             expctd * expctd,
931             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
932             );
933             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
934             (result_datap)[0] = 0;
935             PDL_BROADCASTLOOP_END_approx_artol_readdata
936             #line 937 "lib/PDL/Primitive-pp-approx_artol.c"
937             }
938             #undef PDL_IF_GENTYPE_INTEGER
939             #undef PDL_IF_GENTYPE_REAL
940             #undef PDL_IF_GENTYPE_UNSIGNED
941 123           } break;
942 1           case PDL_ULL: {
943             #define PDL_IF_GENTYPE_INTEGER(t,f) t
944             #define PDL_IF_GENTYPE_REAL(t,f) t
945             #define PDL_IF_GENTYPE_UNSIGNED(t,f) t
946 1 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_ULongLong,P,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
947             {
948             #line 3504 "lib/PDL/Primitive.pd"
949             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
950             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
951             PDL_BROADCASTLOOP_START_approx_artol_readdata
952             #line 3507 "lib/PDL/Primitive.pd"
953             PDL_ULongLong expctd = (expected_datap)[0];
954             if (PDL_ISNAN_P((got_datap)[0]) && PDL_ISNAN_P(expctd)) { (result_datap)[0] = 1; continue; }
955             if (PDL_ISNAN_P((got_datap)[0]) || PDL_ISNAN_P(expctd)) { (result_datap)[0] = 0; continue; }
956             PDL_IF_BAD(
957             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,P,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,P,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
958             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,P,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,P,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
959             ,)
960             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
961             PDL_ULongLong diff = (got_datap)[0] - expctd;
962             double abs_diff2 = PDL_IF_GENTYPE_REAL(
963             diff * diff,
964             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
965             );
966             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
967             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
968             expctd * expctd,
969             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
970             );
971             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
972             (result_datap)[0] = 0;
973             PDL_BROADCASTLOOP_END_approx_artol_readdata
974             #line 975 "lib/PDL/Primitive-pp-approx_artol.c"
975             }
976             #undef PDL_IF_GENTYPE_INTEGER
977             #undef PDL_IF_GENTYPE_REAL
978             #undef PDL_IF_GENTYPE_UNSIGNED
979 1           } break;
980 40           case PDL_LL: {
981             #define PDL_IF_GENTYPE_INTEGER(t,f) t
982             #define PDL_IF_GENTYPE_REAL(t,f) t
983             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
984 40 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_LongLong,Q,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
985             {
986             #line 3504 "lib/PDL/Primitive.pd"
987             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
988             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
989             PDL_BROADCASTLOOP_START_approx_artol_readdata
990             #line 3507 "lib/PDL/Primitive.pd"
991             PDL_LongLong expctd = (expected_datap)[0];
992             if (PDL_ISNAN_Q((got_datap)[0]) && PDL_ISNAN_Q(expctd)) { (result_datap)[0] = 1; continue; }
993             if (PDL_ISNAN_Q((got_datap)[0]) || PDL_ISNAN_Q(expctd)) { (result_datap)[0] = 0; continue; }
994             PDL_IF_BAD(
995             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,Q,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,Q,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
996             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,Q,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,Q,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
997             ,)
998             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
999             PDL_LongLong diff = (got_datap)[0] - expctd;
1000             double abs_diff2 = PDL_IF_GENTYPE_REAL(
1001             diff * diff,
1002             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
1003             );
1004             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
1005             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
1006             expctd * expctd,
1007             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
1008             );
1009             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
1010             (result_datap)[0] = 0;
1011             PDL_BROADCASTLOOP_END_approx_artol_readdata
1012             #line 1013 "lib/PDL/Primitive-pp-approx_artol.c"
1013             }
1014             #undef PDL_IF_GENTYPE_INTEGER
1015             #undef PDL_IF_GENTYPE_REAL
1016             #undef PDL_IF_GENTYPE_UNSIGNED
1017 40           } break;
1018 70           case PDL_F: {
1019             #define PDL_IF_GENTYPE_INTEGER(t,f) f
1020             #define PDL_IF_GENTYPE_REAL(t,f) t
1021             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
1022 70 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Float,F,PDL_SByte,A)
    50          
    50          
    50          
    100          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1023             {
1024             #line 3504 "lib/PDL/Primitive.pd"
1025             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
1026             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
1027             PDL_BROADCASTLOOP_START_approx_artol_readdata
1028             #line 3507 "lib/PDL/Primitive.pd"
1029             PDL_Float expctd = (expected_datap)[0];
1030             if (PDL_ISNAN_F((got_datap)[0]) && PDL_ISNAN_F(expctd)) { (result_datap)[0] = 1; continue; }
1031             if (PDL_ISNAN_F((got_datap)[0]) || PDL_ISNAN_F(expctd)) { (result_datap)[0] = 0; continue; }
1032             PDL_IF_BAD(
1033             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,F,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,F,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
1034             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,F,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,F,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
1035             ,)
1036             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
1037             PDL_Float diff = (got_datap)[0] - expctd;
1038             double abs_diff2 = PDL_IF_GENTYPE_REAL(
1039             diff * diff,
1040             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
1041             );
1042             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
1043             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
1044             expctd * expctd,
1045             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
1046             );
1047             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
1048             (result_datap)[0] = 0;
1049             PDL_BROADCASTLOOP_END_approx_artol_readdata
1050             #line 1051 "lib/PDL/Primitive-pp-approx_artol.c"
1051             }
1052             #undef PDL_IF_GENTYPE_INTEGER
1053             #undef PDL_IF_GENTYPE_REAL
1054             #undef PDL_IF_GENTYPE_UNSIGNED
1055 70           } break;
1056 916           case PDL_D: {
1057             #define PDL_IF_GENTYPE_INTEGER(t,f) f
1058             #define PDL_IF_GENTYPE_REAL(t,f) t
1059             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
1060 916 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_Double,D,PDL_SByte,A)
    50          
    50          
    100          
    100          
    50          
    50          
    100          
    50          
    50          
    50          
    50          
1061             {
1062             #line 3504 "lib/PDL/Primitive.pd"
1063             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
1064             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
1065             PDL_BROADCASTLOOP_START_approx_artol_readdata
1066             #line 3507 "lib/PDL/Primitive.pd"
1067             PDL_Double expctd = (expected_datap)[0];
1068             if (PDL_ISNAN_D((got_datap)[0]) && PDL_ISNAN_D(expctd)) { (result_datap)[0] = 1; continue; }
1069             if (PDL_ISNAN_D((got_datap)[0]) || PDL_ISNAN_D(expctd)) { (result_datap)[0] = 0; continue; }
1070             PDL_IF_BAD(
1071             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,D,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,D,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
1072             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,D,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,D,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
1073             ,)
1074             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
1075             PDL_Double diff = (got_datap)[0] - expctd;
1076             double abs_diff2 = PDL_IF_GENTYPE_REAL(
1077             diff * diff,
1078             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
1079             );
1080             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
1081             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
1082             expctd * expctd,
1083             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
1084             );
1085             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
1086             (result_datap)[0] = 0;
1087             PDL_BROADCASTLOOP_END_approx_artol_readdata
1088             #line 1089 "lib/PDL/Primitive-pp-approx_artol.c"
1089             }
1090             #undef PDL_IF_GENTYPE_INTEGER
1091             #undef PDL_IF_GENTYPE_REAL
1092             #undef PDL_IF_GENTYPE_UNSIGNED
1093 912           } break;
1094 6           case PDL_LD: {
1095             #define PDL_IF_GENTYPE_INTEGER(t,f) f
1096             #define PDL_IF_GENTYPE_REAL(t,f) t
1097             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
1098 6 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_LDouble,E,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1099             {
1100             #line 3504 "lib/PDL/Primitive.pd"
1101             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
1102             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
1103             PDL_BROADCASTLOOP_START_approx_artol_readdata
1104             #line 3507 "lib/PDL/Primitive.pd"
1105             PDL_LDouble expctd = (expected_datap)[0];
1106             if (PDL_ISNAN_E((got_datap)[0]) && PDL_ISNAN_E(expctd)) { (result_datap)[0] = 1; continue; }
1107             if (PDL_ISNAN_E((got_datap)[0]) || PDL_ISNAN_E(expctd)) { (result_datap)[0] = 0; continue; }
1108             PDL_IF_BAD(
1109             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,E,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,E,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
1110             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,E,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,E,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
1111             ,)
1112             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
1113             PDL_LDouble diff = (got_datap)[0] - expctd;
1114             double abs_diff2 = PDL_IF_GENTYPE_REAL(
1115             diff * diff,
1116             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
1117             );
1118             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
1119             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
1120             expctd * expctd,
1121             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
1122             );
1123             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
1124             (result_datap)[0] = 0;
1125             PDL_BROADCASTLOOP_END_approx_artol_readdata
1126             #line 1127 "lib/PDL/Primitive-pp-approx_artol.c"
1127             }
1128             #undef PDL_IF_GENTYPE_INTEGER
1129             #undef PDL_IF_GENTYPE_REAL
1130             #undef PDL_IF_GENTYPE_UNSIGNED
1131 6           } break;
1132 19           case PDL_CF: {
1133             #define PDL_IF_GENTYPE_INTEGER(t,f) f
1134             #define PDL_IF_GENTYPE_REAL(t,f) f
1135             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
1136 19 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_CFloat,G,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1137             {
1138             #line 3504 "lib/PDL/Primitive.pd"
1139             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
1140             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
1141             PDL_BROADCASTLOOP_START_approx_artol_readdata
1142             #line 3507 "lib/PDL/Primitive.pd"
1143             PDL_CFloat expctd = (expected_datap)[0];
1144             if (PDL_ISNAN_G((got_datap)[0]) && PDL_ISNAN_G(expctd)) { (result_datap)[0] = 1; continue; }
1145             if (PDL_ISNAN_G((got_datap)[0]) || PDL_ISNAN_G(expctd)) { (result_datap)[0] = 0; continue; }
1146             PDL_IF_BAD(
1147             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,G,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,G,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
1148             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,G,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,G,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
1149             ,)
1150             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
1151             PDL_CFloat diff = (got_datap)[0] - expctd;
1152             double abs_diff2 = PDL_IF_GENTYPE_REAL(
1153             diff * diff,
1154             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
1155             );
1156             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
1157             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
1158             expctd * expctd,
1159             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
1160             );
1161             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
1162             (result_datap)[0] = 0;
1163             PDL_BROADCASTLOOP_END_approx_artol_readdata
1164             #line 1165 "lib/PDL/Primitive-pp-approx_artol.c"
1165             }
1166             #undef PDL_IF_GENTYPE_INTEGER
1167             #undef PDL_IF_GENTYPE_REAL
1168             #undef PDL_IF_GENTYPE_UNSIGNED
1169 19           } break;
1170 93           case PDL_CD: {
1171             #define PDL_IF_GENTYPE_INTEGER(t,f) f
1172             #define PDL_IF_GENTYPE_REAL(t,f) f
1173             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
1174 93 100         PDL_DECLARE_PARAMS_approx_artol_1(PDL_CDouble,C,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1175             {
1176             #line 3504 "lib/PDL/Primitive.pd"
1177             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
1178             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
1179             PDL_BROADCASTLOOP_START_approx_artol_readdata
1180             #line 3507 "lib/PDL/Primitive.pd"
1181             PDL_CDouble expctd = (expected_datap)[0];
1182             if (PDL_ISNAN_C((got_datap)[0]) && PDL_ISNAN_C(expctd)) { (result_datap)[0] = 1; continue; }
1183             if (PDL_ISNAN_C((got_datap)[0]) || PDL_ISNAN_C(expctd)) { (result_datap)[0] = 0; continue; }
1184             PDL_IF_BAD(
1185             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,C,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,C,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
1186             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,C,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,C,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
1187             ,)
1188             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
1189             PDL_CDouble diff = (got_datap)[0] - expctd;
1190             double abs_diff2 = PDL_IF_GENTYPE_REAL(
1191             diff * diff,
1192             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
1193             );
1194             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
1195             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
1196             expctd * expctd,
1197             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
1198             );
1199             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
1200             (result_datap)[0] = 0;
1201             PDL_BROADCASTLOOP_END_approx_artol_readdata
1202             #line 1203 "lib/PDL/Primitive-pp-approx_artol.c"
1203             }
1204             #undef PDL_IF_GENTYPE_INTEGER
1205             #undef PDL_IF_GENTYPE_REAL
1206             #undef PDL_IF_GENTYPE_UNSIGNED
1207 93           } break;
1208 13           case PDL_CLD: {
1209             #define PDL_IF_GENTYPE_INTEGER(t,f) f
1210             #define PDL_IF_GENTYPE_REAL(t,f) f
1211             #define PDL_IF_GENTYPE_UNSIGNED(t,f) f
1212 13 50         PDL_DECLARE_PARAMS_approx_artol_1(PDL_CLDouble,H,PDL_SByte,A)
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
1213             {
1214             #line 3504 "lib/PDL/Primitive.pd"
1215             double atol2 = __params->atol*__params->atol, rtol2 = __params->rtol*__params->rtol;
1216             PDL_IF_BAD(char got_badflag = !!(__privtrans->pdls[0]->state & PDL_BADVAL); char exp_badflag = !!(__privtrans->pdls[1]->state & PDL_BADVAL);,)
1217             PDL_BROADCASTLOOP_START_approx_artol_readdata
1218             #line 3507 "lib/PDL/Primitive.pd"
1219             PDL_CLDouble expctd = (expected_datap)[0];
1220             if (PDL_ISNAN_H((got_datap)[0]) && PDL_ISNAN_H(expctd)) { (result_datap)[0] = 1; continue; }
1221             if (PDL_ISNAN_H((got_datap)[0]) || PDL_ISNAN_H(expctd)) { (result_datap)[0] = 0; continue; }
1222             PDL_IF_BAD(
1223             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,H,got_badval_isnan)) && (exp_badflag && PDL_ISBAD2(expctd,expected_badval,H,expected_badval_isnan))) { (result_datap)[0] = 1; continue; }
1224             if ((got_badflag && PDL_ISBAD2((got_datap)[0],got_badval,H,got_badval_isnan)) || (exp_badflag && PDL_ISBAD2(expctd,expected_badval,H,expected_badval_isnan))) { (result_datap)[0] = 0; continue; }
1225             ,)
1226             if ((got_datap)[0] == expctd) { (result_datap)[0] = 1; continue; }
1227             PDL_CLDouble diff = (got_datap)[0] - expctd;
1228             double abs_diff2 = PDL_IF_GENTYPE_REAL(
1229             diff * diff,
1230             (creall(diff) * creall(diff)) + (cimagl(diff) * cimagl(diff))
1231             );
1232             if (abs_diff2 <= atol2) { (result_datap)[0] = 1; continue; }
1233             double rel_diff2 = rtol2 * PDL_IF_GENTYPE_REAL(
1234             expctd * expctd,
1235             ((creall(expctd) * creall(expctd)) + (cimagl(expctd) * cimagl(expctd)))
1236             );
1237             if (abs_diff2 <= rel_diff2) { (result_datap)[0] = 1; continue; }
1238             (result_datap)[0] = 0;
1239             PDL_BROADCASTLOOP_END_approx_artol_readdata
1240             #line 1241 "lib/PDL/Primitive-pp-approx_artol.c"
1241             }
1242             #undef PDL_IF_GENTYPE_INTEGER
1243             #undef PDL_IF_GENTYPE_REAL
1244             #undef PDL_IF_GENTYPE_UNSIGNED
1245 13           } break;
1246 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in approx_artol: unhandled datatype(%d), only handles (ABSULKNPQFDEGCH)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
1247             }
1248             #undef PDL_IF_BAD
1249             }
1250 1716           return PDL_err;
1251             }
1252              
1253             static pdl_datatypes pdl_approx_artol_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, PDL_CF, PDL_CD, PDL_CLD, -1 };
1254             static PDL_Indx pdl_approx_artol_vtable_realdims[] = { 0, 0, 0 };
1255             static char *pdl_approx_artol_vtable_parnames[] = { "got","expected","result" };
1256             static short pdl_approx_artol_vtable_parflags[] = {
1257             0,
1258             0,
1259             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISTYPED|PDL_PARAM_ISWRITE
1260             };
1261             static pdl_datatypes pdl_approx_artol_vtable_partypes[] = { -1, -1, PDL_SB };
1262             static PDL_Indx pdl_approx_artol_vtable_realdims_starts[] = { 0, 0, 0 };
1263             static PDL_Indx pdl_approx_artol_vtable_realdims_ind_ids[] = { 0 };
1264             static char *pdl_approx_artol_vtable_indnames[] = { "" };
1265             pdl_transvtable pdl_approx_artol_vtable = {
1266             PDL_TRANS_DO_BROADCAST|PDL_TRANS_BADPROCESS, 0, pdl_approx_artol_vtable_gentypes, 2, 3, NULL /*CORE21*/,
1267             pdl_approx_artol_vtable_realdims, pdl_approx_artol_vtable_parnames,
1268             pdl_approx_artol_vtable_parflags, pdl_approx_artol_vtable_partypes,
1269             pdl_approx_artol_vtable_realdims_starts, pdl_approx_artol_vtable_realdims_ind_ids, 0,
1270             0, pdl_approx_artol_vtable_indnames,
1271             NULL, pdl_approx_artol_readdata, NULL,
1272             NULL,
1273             sizeof(pdl_params_approx_artol),"PDL::Primitive::approx_artol"
1274             };
1275              
1276              
1277 1698           pdl_error pdl_run_approx_artol(pdl *got,pdl *expected,pdl *result,double atol,double rtol) {
1278 1698           pdl_error PDL_err = {0, NULL, 0};
1279 1698 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
1280 1698           pdl_trans *__privtrans = PDL->create_trans(&pdl_approx_artol_vtable);
1281 1698 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
1282 1698           pdl_params_approx_artol *__params = __privtrans->params;
1283 1698           __privtrans->pdls[0] = got;
1284 1698           __privtrans->pdls[1] = expected;
1285 1698           __privtrans->pdls[2] = result;
1286 1698 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
1287 1698           (__params->atol) = (atol); /* CType.get_copy */
1288 1698           (__params->rtol) = (rtol); /* CType.get_copy */
1289 1698 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
1290 1698           return PDL_err;
1291             }