1 #define MAIN(x) regress_simple##x
3 #include "a/regress_simple.h"
6 #define RAND_MAX_ 2147483647
7 static unsigned long rand_seed
= 1;
8 static void srand_(unsigned long seed
)
12 static long rand_(void)
14 rand_seed
= (rand_seed
* 1103515245UL + 12345) % 2147483648UL;
15 return a_cast_s(long, rand_seed
);
18 int main(int argc
, char *argv
[]) /* NOLINT(misc-definitions-in-headers) */
24 a_real a
= A_REAL_C(0.7);
28 if (argc
> 2) { a
= strtonum(argv
[2], &endptr
); }
29 if (argc
> 3) { b
= strtonum(argv
[3], &endptr
); }
30 if (argc
> 4) { n
= strtoul(argv
[4], &endptr
, 0); }
32 x
= a_new(a_real
, A_NULL
, n
);
33 y
= a_new(a_real
, A_NULL
, n
);
34 x_n
= a_cast_s(long, n
) * 10;
35 y_n
= a_cast_s(long, n
) * 2;
37 srand_(a_cast_s(a_ulong
, time(A_NULL
)));
38 main_init(argc
, argv
, 1);
39 for (i
= 0; i
< n
; ++i
)
41 x
[i
] = a_cast_s(a_real
, rand_() % x_n
);
42 y
[i
] = a
* x
[i
] + b
+ a_cast_s(a_real
, rand_() % y_n
) - a_cast_s(a_real
, n
);
45 a_regress_simple_init(&ctx
, 0, 0);
46 a_regress_simple_ols(&ctx
, n
, x
, y
);
48 for (i
= 0; i
< n
; ++i
)
50 a_real u
= a_cast_s(a_real
, i
* 10);
51 a_real v
= a_regress_simple_eval(&ctx
, u
);
52 debug("%+.1" A_REAL_PRI
"f,%+.1" A_REAL_PRI
"f,%+.1" A_REAL_PRI
"f,%+.1" A_REAL_PRI
"f\n", u
, v
, x
[i
], y
[i
]);
55 a_regress_simple_zero(&ctx
);
60 #if defined(__cplusplus) && (__cplusplus > 201100L)
61 A_BUILD_ASSERT(std::is_pod
<a_regress_simple
>::value
);
62 #endif /* __cplusplus */