Zephyr Scientific Library (zscilib)
zsl.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019-2021 Kevin Townsend (KTOWN)
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
14 #ifndef ZEPHYR_INCLUDE_ZSL_H_
15 #define ZEPHYR_INCLUDE_ZSL_H_
16 
17 #include <math.h>
18 #include <stdbool.h>
19 #include <stddef.h>
20 #include <stdint.h>
21 #include <zsl/consts.h>
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /*
28  * Version numbers take the form of "MAJOR.MINOR.REVISION-STATUS".
29  *
30  * ZSL_VERSION_STATUS should be one of:
31  *
32  * o "-prerelease"
33  * o "-alpha"
34  * o "-beta"
35  * o "-rc0", "-rc1", etc.
36  * o "-release"
37  */
38 
39 #define ZSL_VERSION "0.2.0-rc1"
40 #define ZSL_VERSION_MAJOR 0
41 #define ZSL_VERSION_MINOR 2
42 #define ZSL_VERSION_REVISION 0
43 #define ZSL_VERSION_STATUS "-rc1"
44 #define ZSL_VERSION_DATE __DATE__
45 
46 extern const char *zsl_version;
47 
48 #if CONFIG_ZSL_SINGLE_PRECISION
49 typedef float zsl_real_t;
50 #else
51 typedef double zsl_real_t;
52 #endif
53 
54 /* Map math functions based on single or double precision. */
55 /* TODO: Add an option for fast approximations of trig operations. */
56 #if CONFIG_ZSL_SINGLE_PRECISION
57 #define ZSL_CEIL ceilf
58 #define ZSL_FLOOR floorf
59 #define ZSL_ROUND roundf
60 #define ZSL_ABS fabsf
61 #define ZSL_MIN fminf
62 #define ZSL_MAX fmaxf
63 #define ZSL_POW powf
64 #define ZSL_EXP expf
65 #define ZSL_LOG logf
66 #define ZSL_LOG10 log10f
67 #define ZSL_SQRT sqrtf
68 #define ZSL_SIN sinf
69 #define ZSL_COS cosf
70 #define ZSL_TAN tanf
71 #define ZSL_ASIN asinf
72 #define ZSL_ACOS acosf
73 #define ZSL_ATAN atanf
74 #define ZSL_ATAN2 atan2f
75 #define ZSL_SINH sinhf
76 #define ZSL_COSH coshf
77 #define ZSL_TANH tanhf
78 #define ZSL_ERF erff
79 #define ZSL_FMA fmaf
80 #else
81 #define ZSL_CEIL ceil
82 #define ZSL_FLOOR floor
83 #define ZSL_ROUND round
84 #define ZSL_ABS fabs
85 #define ZSL_MIN fmin
86 #define ZSL_MAX fmax
87 #define ZSL_POW pow
88 #define ZSL_EXP exp
89 #define ZSL_LOG log
90 #define ZSL_LOG10 log10
91 #define ZSL_SQRT sqrt
92 #define ZSL_SIN sin
93 #define ZSL_COS cos
94 #define ZSL_TAN tan
95 #define ZSL_ASIN asin
96 #define ZSL_ACOS acos
97 #define ZSL_ATAN atan
98 #define ZSL_ATAN2 atan2
99 #define ZSL_SINH sinh
100 #define ZSL_COSH cosh
101 #define ZSL_TANH tanh
102 #define ZSL_ERF erf
103 #define ZSL_FMA fma
104 #endif
105 
106 
107 /* TODO: Define common errors like shape mismatch, etc. */
108 
109 #ifdef __cplusplus
110 }
111 #endif
112 
113 #endif /* ZEPHYR_INCLUDE_ZSL_H_ */
consts.h
Constant values for zscilib.
zsl_version
const char * zsl_version
Definition: zsl.c:9
zsl_real_t
double zsl_real_t
Definition: zsl.h:51