annotate q/q.h @ 16:56a79dce90e9

Commit WIP ctrl code
author Daniel O'Connor <darius@dons.net.au>
date Tue, 25 Feb 2025 13:31:27 +1030
parents 388074ff9474
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
1 /* Project: Q-Number (Q16.16, signed) library
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
2 * Author: Richard James Howe
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
3 * License: The Unlicense
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
4 * Email: howe.r.j.89@gmail.com
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
5 * Repo: <https://github.com/q> */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
6
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
7 #ifndef Q_H
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
8 #define Q_H
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
9
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
10 #ifdef __cplusplus
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
11 extern "C" {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
12 #endif
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
13
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
14 #include <stdint.h>
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
15 #include <stddef.h>
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
16
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
17 #define QMAX_ID (32)
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
18 #define QMAX_ERROR (256)
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
19
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
20 #define QBITS (12)
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
21 #define QMASK ((1ULL << QBITS) - 1ULL)
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
22 #define QHIGH (1ULL << (QBITS - 1ULL))
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
23
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
24 #define QMK(QHIGH, LOW, SF) ((ld_t)((((lu_t)QHIGH) << QBITS) | (QMASK & ((((lu_t)LOW) << QBITS) >> (SF)))))
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
25 #define QINT(INT) ((q_t)((u_t)(INT) << QBITS))
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
26 #define QPI (QMK(0x3, 0x243F, 16))
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
27
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
28 #ifndef PREPACK
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 #define PREPACK
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
30 #endif
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
32 #ifndef POSTPACK
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
33 #define POSTPACK
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
34 #endif
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
35
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
36 #ifndef RESTRICT
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
37 #ifdef __cplusplus
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
38 #define RESTRICT
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
39 #else
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
40 #define RESTRICT restrict
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
41 #endif
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
42 #endif
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
43
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
44 typedef int32_t q_t; /* Q Fixed Point Number, (Q16.16, Signed) */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
45 typedef int64_t ld_t; /* Double width of Q, signed, for internal calculations, not in Q format */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
46 typedef int32_t d_t; /* same width as Q, signed, but not in Q format */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
47 typedef uint32_t u_t; /* same width as Q, unsigned, but not in Q format */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
48
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
49 typedef PREPACK struct {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
50 size_t whole, /* number of bits for whole, or integer, part of Q number */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
51 fractional; /* number of bits for fractional part of Q number */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
52 const q_t zero, /* the constant '0' */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
53 bit, /* smallest 'q' number representable */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
54 one, /* the constant '1' */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
55 pi, /* the constant 'pi' */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
56 e, /* the constant 'e' */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
57 sqrt2, /* the square root of 2 */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
58 sqrt3, /* the square root of 3 */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
59 ln2, /* the natural logarithm of 2 */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
60 ln10, /* the natural logarithm of 10 */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
61 min, /* most negative 'q' number */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
62 max; /* most positive 'q' number */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
63 const uint32_t version; /* version in X.Y.Z format (Z = lowest 8 bits) */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
64 } POSTPACK qinfo_t;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
65
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
66 typedef PREPACK struct {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
67 q_t rc, /* time constant */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
68 time, /* time of previous measurement */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
69 raw, /* previous raw value */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
70 filtered; /* filtered value */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
71 } POSTPACK qfilter_t; /* High/Low Pass Filter */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
72
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
73 typedef PREPACK struct {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
74 q_t d_gain, d_state; /* differentiator; gain, state */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
75 q_t i_gain, i_state, i_min, i_max; /* integrator; gain, state, minimum and maximum */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
76 q_t p_gain; /* proportional gain */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
77 } POSTPACK qpid_t; /* PID Controller <https://en.wikipedia.org/wiki/PID_controller> */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
78
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
79 struct qexpr;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
80 typedef struct qexpr qexpr_t;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
81
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
82 typedef PREPACK struct {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
83 char *name;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
84 union {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
85 q_t (*unary) (q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
86 q_t (*binary) (q_t a1, q_t a2);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
87 } eval;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
88 union {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
89 q_t (*unary) (qexpr_t *e, q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
90 q_t (*binary) (qexpr_t *e, q_t a1, q_t a2);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
91 } check;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
92 int precedence, arity, assocativity, hidden;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
93 } POSTPACK qoperations_t; /* use in the expression evaluator */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
94
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
95 typedef PREPACK struct {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
96 char *name;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
97 q_t value;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
98 } POSTPACK qvariable_t; /* Variable which can be used with the expression evaluator */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
99
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
100 struct PREPACK qexpr {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
101 const qoperations_t **ops, *lpar, *rpar, *negate, *minus;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
102 qvariable_t **vars;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
103 char id[QMAX_ID];
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
104 char error_string[QMAX_ERROR];
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
105 q_t number;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
106 const qoperations_t *op;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
107 q_t *numbers;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
108 size_t ops_count, ops_max;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
109 size_t numbers_count, numbers_max;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
110 size_t id_count;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
111 size_t vars_max;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
112 int error;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
113 int initialized;
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
114 } POSTPACK; /* An expression evaluator for the Q library */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
115
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
116 typedef q_t (*qbounds_t)(ld_t s);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
117
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
118 q_t qbound_saturate(ld_t s); /* default over/underflow behavior, saturation */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
119 q_t qbound_wrap(ld_t s); /* over/underflow behavior, wrap around */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
120
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
121 typedef PREPACK struct {
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
122 qbounds_t bound; /* handles saturation when a number over or underflows */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
123 int dp; /* decimal points to print, negative specifies maximum precision */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
124 unsigned base; /* base to use for numeric number conversion */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
125 } POSTPACK qconf_t; /* Q format configuration options */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
126
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
127 extern const qinfo_t qinfo; /* information about the format and constants */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
128 extern qconf_t qconf; /* @warning GLOBAL Q configuration options */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
129
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
130 int qtoi(q_t toi);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
131 q_t qint(int toq);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
132 signed char qtoc(const q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
133 q_t qchar(signed char c);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
134 short qtoh(const q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
135 q_t qshort(short s);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
136 long qtol(const q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
137 q_t qlong(long l);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
138 long long qtoll(const q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
139 q_t qvlong(long long ll);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
140
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
141 q_t qisnegative(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
142 q_t qispositive(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
143 q_t qisinteger(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
144 q_t qisodd(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
145 q_t qiseven(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
146
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
147 q_t qless(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
148 q_t qmore(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
149 q_t qeqless(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
150 q_t qeqmore(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
151 q_t qequal(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
152 q_t qunequal(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
153 q_t qapproxequal(q_t a, q_t b, q_t epsilon);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
154 q_t qapproxunequal(q_t a, q_t b, q_t epsilon);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
155 q_t qwithin(q_t v, q_t b1, q_t b2);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
156 q_t qwithin_interval(q_t v, q_t expected, q_t allowance);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
157
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
158 q_t qnegate(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
159 q_t qmin(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
160 q_t qmax(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
161 q_t qabs(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
162 q_t qcopysign(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
163 q_t qsign(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
164 q_t qsignum(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
165
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
166 q_t qadd(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
167 q_t qsub(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
168 q_t qmul(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
169 q_t qdiv(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
170 q_t qrem(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
171 q_t qmod(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
172 q_t qfma(q_t a, q_t b, q_t c);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
173 q_t qsqr(q_t x);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
174 q_t qexp(q_t e);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
175 q_t qlog(q_t n);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
176 q_t qsqrt(q_t x);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
177
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
178 q_t qround(q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
179 q_t qceil(q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
180 q_t qtrunc(q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
181 q_t qfloor(q_t q);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
182
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
183 q_t qand(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
184 q_t qxor(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
185 q_t qor(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
186 q_t qinvert(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
187 q_t qnot(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
188 q_t qlogical(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
189
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
190 q_t qlls(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
191 q_t qlrs(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
192 q_t qals(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
193 q_t qars(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
194
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
195 q_t qpow(q_t n, q_t exp);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
196
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
197 int qsprint(q_t p, char *s, size_t length);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
198 int qsprintb(q_t p, char *s, size_t length, u_t base);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
199 int qsprintbdp(q_t p, char *s, size_t length, u_t base, d_t idp);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
200 int qnconv(q_t *q, const char *s, size_t length);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
201 int qnconvb(q_t *q, const char *s, size_t length, d_t base);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
202 int qconv(q_t *q, const char *s);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
203 int qconvb(q_t *q, const char * const s, d_t base);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
204 int qnconvbdp(q_t *q, const char *s, size_t length, d_t base, u_t idp);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
205
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
206 void qsincos(q_t theta, q_t *sine, q_t *cosine);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
207 q_t qsin(q_t theta);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
208 q_t qcos(q_t theta);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
209 q_t qtan(q_t theta);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
210 q_t qcot(q_t theta);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
211 q_t qhypot(q_t a, q_t b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
212
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
213 q_t qatan(q_t t);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
214 q_t qatan2(q_t x, q_t y);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
215 q_t qasin(q_t t);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
216 q_t qacos(q_t t);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
217 q_t qsinh(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
218 q_t qcosh(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
219 q_t qtanh(q_t a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
220
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
221 q_t qatanh(q_t t);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
222 q_t qasinh(q_t t);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
223 q_t qacosh(q_t t);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
224
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
225 void qsincosh(q_t a, q_t *sinh, q_t *cosh);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
226
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
227 q_t qcordic_ln(q_t d); /* CORDIC testing only */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
228 q_t qcordic_exp(q_t e); /* CORDIC testing only; useless for large values */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
229 q_t qcordic_sqrt(q_t a); /* CORDIC testing only; do not use, a <= 2, a >= 0 */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
230 q_t qcordic_mul(q_t a, q_t b); /* CORDIC testing only; do not use */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
231 q_t qcordic_div(q_t a, q_t b); /* CORDIC testing only; do not use */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
232 q_t qcordic_circular_gain(int n);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
233 q_t qcordic_hyperbolic_gain(int n);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
234
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
235 void qpol2rec(q_t magnitude, q_t theta, q_t *i, q_t *j);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
236 void qrec2pol(q_t i, q_t j, q_t *magnitude, q_t *theta);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
237
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
238 q_t qrad2deg(q_t rad);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
239 q_t qdeg2rad(q_t deg);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
240
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
241 d_t dpower(d_t b, unsigned e);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
242 d_t dlog(d_t n, unsigned base);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
243 d_t arshift(d_t v, unsigned p);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
244 int qpack(const q_t *q, char *buffer, size_t length);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
245 int qunpack(q_t *q, const char *buffer, size_t length);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
246
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
247 q_t qsimpson(q_t (*f)(q_t), q_t x1, q_t x2, unsigned n); /* numerical integrator of f, between x1, x2, for n steps */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
248
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
249 void qfilter_init(qfilter_t *f, q_t time, q_t rc, q_t seed);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
250 q_t qfilter_low_pass(qfilter_t *f, q_t time, q_t data);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
251 q_t qfilter_high_pass(qfilter_t *f, q_t time, q_t data);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
252 q_t qfilter_value(const qfilter_t *f);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
253
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
254 q_t qpid_update(qpid_t *pid, const q_t error, const q_t position);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
255
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
256 /* A matrix consists of at least four elements, a meta data field,
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
257 * the length of the array (which must be big enough to store
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
258 * row*column, but may be * larger) and a row and a column count
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
259 * in unsigned integer format, and the array elements in Q format.
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
260 * This simplifies storage and declaration of matrices.
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
261 *
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
262 * An example, the 2x3 matrix:
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
263 *
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
264 * [ 1, 2, 3; 4, 5, 6 ]
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
265 *
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
266 * Should be defined as:
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
267 *
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
268 * q_t m[] = { 0, 2*3, 2, 3, QINT(1), QINT(2), QINT(3), QINT(4), QINT(5), QINT(6) };
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
269 *
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
270 */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
271 int qmatrix_apply_unary(q_t *r, const q_t *a, q_t (*func)(q_t));
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
272 int qmatrix_apply_scalar(q_t *r, const q_t *a, q_t (*func)(q_t, q_t), const q_t c);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
273 int qmatrix_apply_binary(q_t * RESTRICT r, const q_t *a, const q_t *b, q_t (*func)(q_t, q_t));
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
274 int qmatrix_sprintb(const q_t *m, char *str, size_t length, unsigned base);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
275 int qmatrix_resize(q_t *m, const size_t row, const size_t column);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
276 int qmatrix_copy(q_t *r, const q_t *a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
277 size_t qmatrix_string_length(const q_t *m);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
278
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
279 q_t qmatrix_trace(const q_t *m);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
280 q_t qmatrix_determinant(const q_t *m);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
281 q_t qmatrix_equal(const q_t *a, const q_t *b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
282
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
283 int qmatrix_zero(q_t *r);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
284 int qmatrix_one(q_t *r);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
285 int qmatrix_identity(q_t *r); /* turn into identity matrix, r must be square */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
286
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
287 int qmatrix_logical(q_t *r, const q_t *a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
288 int qmatrix_not(q_t *r, const q_t *a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
289 int qmatrix_signum(q_t *r, const q_t *a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
290 int qmatrix_invert(q_t *r, const q_t *a);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
291
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
292 int qmatrix_is_valid(const q_t *m);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
293 int qmatrix_is_square(const q_t *m);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
294
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
295 int qmatrix_transpose(q_t * RESTRICT r, const q_t * RESTRICT m);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
296 int qmatrix_add(q_t * RESTRICT r, const q_t *a, const q_t *b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
297 int qmatrix_sub(q_t * RESTRICT r, const q_t *a, const q_t *b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
298 int qmatrix_mul(q_t * RESTRICT r, const q_t *a, const q_t *b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
299 int qmatrix_and(q_t *r, const q_t *a, const q_t *b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
300 int qmatrix_or (q_t *r, const q_t *a, const q_t *b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
301 int qmatrix_xor(q_t *r, const q_t *a, const q_t *b);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
302
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
303 int qmatrix_scalar_add(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
304 int qmatrix_scalar_sub(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
305 int qmatrix_scalar_mul(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
306 int qmatrix_scalar_div(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
307 int qmatrix_scalar_mod(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
308 int qmatrix_scalar_rem(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
309 int qmatrix_scalar_and(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
310 int qmatrix_scalar_or (q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
311 int qmatrix_scalar_xor(q_t *r, const q_t *a, const q_t scalar);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
312
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
313 /* Expression evaluator */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
314
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
315 int qexpr(qexpr_t *e, const char *expr);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
316 int qexpr_init(qexpr_t *e);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
317 int qexpr_error(qexpr_t *e);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
318 q_t qexpr_result(qexpr_t *e);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
319 const qoperations_t *qop(const char *op);
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
320
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
321 /* A better cosine/sine, not in Q format */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
322
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
323 int16_t furman_sin(int16_t x); /* SINE: 1 Furman = 1/65536 of a circle */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
324 int16_t furman_cos(int16_t x); /* COSINE: 1 Furman = 1/65536 of a circle */
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
325
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
326 #ifdef __cplusplus
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
327 }
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
328 #endif
388074ff9474 Add fixed point code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
329 #endif