libGimbal 0.1.0
C17-Based Extended Standard Library and Cross-Language Runtime Framework
Loading...
Searching...
No Matches
gimbal_numeric.h
Go to the documentation of this file.
1/*! \file
2 * \brief General numeric constants and computations
3 * \ingroup numeric
4 *
5 * \author Shirobon
6 * \author Falco Girgis
7 *
8 * \copyright MIT License
9 */
10
11#ifndef GIMBAL_NUMERIC_H
12#define GIMBAL_NUMERIC_H
13
14#include "../core/gimbal_decls.h"
15#include "../preprocessor/gimbal_macro_utils.h"
16#include <float.h>
17#include <math.h>
18
19#define GBL_F_PI 3.1415926f
20
21#define gblPow2Next(X) GBL_META_GENERIC_MACRO_GENERATE(GBL_POW2_NEXT_TRAITS_, X)(X)
22
24
25/*! \defgroup numeric Numeric
26 * \ingroup algorithms
27 * \brief Collection of assorted numeric algorithms.
28 * @{
29 */
30GBL_EXPORT uint8_t gblPow2Next_u8 (uint8_t n) GBL_NOEXCEPT;
31GBL_EXPORT uint16_t gblPow2Next_u16 (uint16_t n) GBL_NOEXCEPT;
32GBL_EXPORT uint32_t gblPow2Next_u32 (uint32_t n) GBL_NOEXCEPT;
33GBL_EXPORT uint64_t gblPow2Next_u64 (uint64_t n) GBL_NOEXCEPT;
34GBL_EXPORT GblBool gblPow2Check (size_t n) GBL_NOEXCEPT;
35GBL_EXPORT int gblFibonacci (int n) GBL_NOEXCEPT;
36GBL_EXPORT int gblGcd (int u, int v) GBL_NOEXCEPT;
37GBL_EXPORT int gblLcm (int u, int v) GBL_NOEXCEPT;
38GBL_EXPORT uint32_t gblNtohl (uint32_t n) GBL_NOEXCEPT;
39GBL_EXPORT uint32_t gblHtonl (uint32_t x) GBL_NOEXCEPT;
40GBL_EXPORT int gblParity (uint8_t n) GBL_NOEXCEPT;
41GBL_EXPORT size_t gblAlignedAllocSizeDefault (size_t bytes) GBL_NOEXCEPT;
42GBL_EXPORT size_t gblAlignedAllocSize (size_t size,
43 size_t align/*=0*/) GBL_NOEXCEPT;
44GBL_EXPORT uint32_t gblPrimeNextDouble (uint32_t number) GBL_NOEXCEPT;
45GBL_EXPORT GblBool gblPrimeCheck (int n) GBL_NOEXCEPT;
46GBL_EXPORT unsigned long gblBinomialCoeff (unsigned n, unsigned k) GBL_NOEXCEPT;
47GBL_EXPORT unsigned long gblCatalan (unsigned n) GBL_NOEXCEPT;
48GBL_EXPORT GblBool gblFloatEquals (double a,
49 double b,
50 double e/*=DBL_EPSILON*/) GBL_NOEXCEPT;
51GBL_EXPORT double gblAbsoluteError (double approximate,
52 double exact) GBL_NOEXCEPT;
53GBL_EXPORT double gblRelativeError (double approximate,
54 double exact) GBL_NOEXCEPT;
55
56
57GBL_EXPORT float gblDegToRadf (float degrees) GBL_NOEXCEPT;
58GBL_EXPORT float gblRadToDegf (float radians) GBL_NOEXCEPT;
59
60#if 0
61GBL_EXPORT void gblCartesianToPolarf (float x, float y, float* pRad, float* pAng) GBL_NOEXCEPT;
62GBL_EXPORT void gblPolarToCartesianf (float rad, float ang, float* pX, float* pY) GBL_NOEXCEPT;
63GBL_EXPORT float gblLerpf (float v1, float v2, float frac) GBL_NOEXCEPT;
64// various interpolation functions
65GBL_EXPORT float gblDynamicWeightedMovingAverage(float current, float prev, float maxDist, float minWeight, float maxWeight) GBL_NOEXCEPT;
66GBL_EXPORT float gblRangePctf(float min, float max, float value) GBL_NOEXCEPT;
67GBL_EXPORT GblBool gblPow2Checkz(size_t value) GBL_NOEXCEPT;
68GBL_EXPORT GblBool gblWithinCheckf(float value, float min, float max) GBL_NOEXCEPT;
69GBL_EXPORT GblBool gblWithinInclusiveCheckf(float value, float min, float max) GBL_NOEXCEPT;
70//GBL_EXPORT float gblPulsatef(float inTime, float inPulsesPerSecond, float inPhase) GBL_NOEXCEPT;
71//GBL_EXPORT float gblPerlinNoise(float value) GBL_NOEXCEPT;
72//GBL_EXPORT float gblWrapf(float value) GBL_NOEXCEPT;
73#endif
74
75/// @}
76
78
79///\cond
80#define gblAlignedAllocSize(...)
81 gblAlignedAllocSizeDefault_(__VA_ARGS__)
82#define gblAlignedAllocSizeDefault_(...)
83 gblAlignedAllocSizeDefault__(__VA_ARGS__, 0)
84#define gblAlignedAllocSizeDefault__(size, align, ...)
85 (gblAlignedAllocSize)(size, align)
86
87#define GBL_POW2_NEXT_TRAITS_ (
88 gblPow2Next_u64,
89 (
90 (uint8_t, gblPow2Next_u8),
91 (uint16_t, gblPow2Next_u16),
92 (uint32_t, gblPow2Next_u32),
93 (uint64_t, gblPow2Next_u64)
94 )
95 )
96
97#define gblFloatEquals(...)
98 gblFloatEqualsDefault_(__VA_ARGS__, DBL_EPSILON)
99#define gblFloatEqualsDefault_(a, b, e, ...)
100 (gblFloatEquals)(a, b, e)
101///\endcond
102
103#endif // GIMBAL_NUMERIC_H
#define GBL_NOEXCEPT
#define GBL_DECLS_BEGIN
#define GBL_EXPORT
#define GBL_META_GENERIC_MACRO_GENERATE(traits, X)
uint8_t GblBool
Basic boolean type, standardized to sizeof(char)