1 #ifndef __GO_QUAD_H
2 #define __GO_QUAD_H
3 
4 #include <glib.h>
5 
6 G_BEGIN_DECLS
7 
8 struct GOQuad_ {
9 	double h;
10 	double l;
11 };
12 
13 gboolean go_quad_functional (void);
14 void *go_quad_start (void);
15 void go_quad_end (void *state);
16 
17 void go_quad_init (GOQuad *res, double h);
18 
19 double go_quad_value (const GOQuad *a);
20 void go_quad_add (GOQuad *res, const GOQuad *a, const GOQuad *b);
21 void go_quad_sub (GOQuad *res, const GOQuad *a, const GOQuad *b);
22 void go_quad_mul (GOQuad *res, const GOQuad *a, const GOQuad *b);
23 void go_quad_div (GOQuad *res, const GOQuad *a, const GOQuad *b);
24 void go_quad_sqrt (GOQuad *res, const GOQuad *a);
25 void go_quad_floor (GOQuad *res, const GOQuad *a);
26 void go_quad_pow (GOQuad *res, double *exp2, const GOQuad *x, const GOQuad *y);
27 void go_quad_exp (GOQuad *res, double *exp2, const GOQuad *a);
28 void go_quad_expm1 (GOQuad *res, const GOQuad *a);
29 void go_quad_log (GOQuad *res, const GOQuad *a);
30 void go_quad_hypot (GOQuad *res, const GOQuad *a, const GOQuad *b);
31 
32 void go_quad_sin (GOQuad *res, const GOQuad *a);
33 void go_quad_sinpi (GOQuad *res, const GOQuad *a);
34 void go_quad_asin (GOQuad *res, const GOQuad *a);
35 void go_quad_cos (GOQuad *res, const GOQuad *a);
36 void go_quad_cospi (GOQuad *res, const GOQuad *a);
37 void go_quad_acos (GOQuad *res, const GOQuad *a);
38 void go_quad_atan2 (GOQuad *res, const GOQuad *y, const GOQuad *x);
39 void go_quad_atan2pi (GOQuad *res, const GOQuad *y, const GOQuad *x);
40 
41 void go_quad_mul12 (GOQuad *res, double x, double y);
42 
43 void go_quad_dot_product (GOQuad *res, const GOQuad *a, const GOQuad *b, int n);
44 
45 void go_quad_constant8 (GOQuad *res, const guint8 *data, gsize n, double base, double scale);
46 
47 #ifndef GO_QUAD_IMPL
48 #define GO_QUAD_IMPL const
49 #endif
50 
51 GO_VAR_DECL const GOQuad go_quad_zero;
52 GO_VAR_DECL const GOQuad go_quad_one;
53 GO_VAR_DECL GO_QUAD_IMPL GOQuad go_quad_pi;
54 GO_VAR_DECL GO_QUAD_IMPL GOQuad go_quad_2pi;
55 GO_VAR_DECL GO_QUAD_IMPL GOQuad go_quad_e;
56 GO_VAR_DECL GO_QUAD_IMPL GOQuad go_quad_ln2;
57 GO_VAR_DECL GO_QUAD_IMPL GOQuad go_quad_sqrt2;
58 GO_VAR_DECL GO_QUAD_IMPL GOQuad go_quad_euler;
59 
60 #ifdef GOFFICE_WITH_LONG_DOUBLE
61 struct GOQuadl_ {
62 	long double h;
63 	long double l;
64 };
65 
66 gboolean go_quad_functionall (void);
67 void *go_quad_startl (void);
68 void go_quad_endl (void *state);
69 
70 void go_quad_initl (GOQuadl *res, long double h);
71 
72 long double go_quad_valuel (const GOQuadl *a);
73 void go_quad_addl (GOQuadl *res, const GOQuadl *a, const GOQuadl *b);
74 void go_quad_subl (GOQuadl *res, const GOQuadl *a, const GOQuadl *b);
75 void go_quad_mull (GOQuadl *res, const GOQuadl *a, const GOQuadl *b);
76 void go_quad_divl (GOQuadl *res, const GOQuadl *a, const GOQuadl *b);
77 void go_quad_sqrtl (GOQuadl *res, const GOQuadl *a);
78 void go_quad_floorl (GOQuadl *res, const GOQuadl *a);
79 void go_quad_powl (GOQuadl *res, long double *exp2, const GOQuadl *x, const GOQuadl *y);
80 void go_quad_expl (GOQuadl *res, long double *exp2, const GOQuadl *a);
81 void go_quad_expm1l (GOQuadl *res, const GOQuadl *a);
82 void go_quad_logl (GOQuadl *res, const GOQuadl *a);
83 void go_quad_hypotl (GOQuadl *res, const GOQuadl *a, const GOQuadl *b);
84 
85 void go_quad_sinl (GOQuadl *res, const GOQuadl *a);
86 void go_quad_sinpil (GOQuadl *res, const GOQuadl *a);
87 void go_quad_asinl (GOQuadl *res, const GOQuadl *a);
88 void go_quad_cosl (GOQuadl *res, const GOQuadl *a);
89 void go_quad_cospil (GOQuadl *res, const GOQuadl *a);
90 void go_quad_acosl (GOQuadl *res, const GOQuadl *a);
91 void go_quad_atan2l (GOQuadl *res, const GOQuadl *y, const GOQuadl *x);
92 void go_quad_atan2pil (GOQuadl *res, const GOQuadl *y, const GOQuadl *x);
93 
94 void go_quad_mul12l (GOQuadl *res, long double x, long double y);
95 
96 void go_quad_dot_productl (GOQuadl *res,
97 			   const GOQuadl *a, const GOQuadl *b, int n);
98 
99 void go_quad_constant8l (GOQuadl *res, const guint8 *data, gsize n, long double base, long double scale);
100 
101 GO_VAR_DECL const GOQuadl go_quad_zerol;
102 GO_VAR_DECL const GOQuadl go_quad_onel;
103 GO_VAR_DECL GO_QUAD_IMPL GOQuadl go_quad_pil;
104 GO_VAR_DECL GO_QUAD_IMPL GOQuadl go_quad_2pil;
105 GO_VAR_DECL GO_QUAD_IMPL GOQuadl go_quad_el;
106 GO_VAR_DECL GO_QUAD_IMPL GOQuadl go_quad_ln2l;
107 GO_VAR_DECL GO_QUAD_IMPL GOQuadl go_quad_sqrt2l;
108 GO_VAR_DECL GO_QUAD_IMPL GOQuadl go_quad_eulerl;
109 
110 #endif
111 
112 G_END_DECLS
113 
114 #endif
115