diff options
Diffstat (limited to 'common/math_defs.h')
-rw-r--r-- | common/math_defs.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/common/math_defs.h b/common/math_defs.h new file mode 100644 index 00000000..aa79b695 --- /dev/null +++ b/common/math_defs.h @@ -0,0 +1,65 @@ +#ifndef AL_MATH_DEFS_H +#define AL_MATH_DEFS_H + +#include <math.h> +#ifdef HAVE_FLOAT_H +#include <float.h> +#endif + +#ifndef M_PI +#define M_PI (3.14159265358979323846) +#endif + +#define F_PI (3.14159265358979323846f) +#define F_PI_2 (1.57079632679489661923f) +#define F_TAU (6.28318530717958647692f) + +#ifndef FLT_EPSILON +#define FLT_EPSILON (1.19209290e-07f) +#endif + +#define SQRT_2 1.41421356237309504880 +#define SQRT_3 1.73205080756887719318 + +#define SQRTF_2 1.41421356237309504880f +#define SQRTF_3 1.73205080756887719318f + +#ifndef HUGE_VALF +static const union msvc_inf_hack { + unsigned char b[4]; + float f; +} msvc_inf_union = {{ 0x00, 0x00, 0x80, 0x7F }}; +#define HUGE_VALF (msvc_inf_union.f) +#endif + +#ifndef HAVE_LOG2F +static inline float log2f(float f) +{ + return logf(f) / logf(2.0f); +} +#endif + +#ifndef HAVE_CBRTF +static inline float cbrtf(float f) +{ + return powf(f, 1.0f/3.0f); +} +#endif + +#ifndef HAVE_COPYSIGNF +static inline float copysignf(float x, float y) +{ + union { + float f; + unsigned int u; + } ux = { x }, uy = { y }; + ux.u &= 0x7fffffffu; + ux.u |= (uy.u&0x80000000u); + return ux.f; +} +#endif + +#define DEG2RAD(x) ((float)(x) * (float)(M_PI/180.0)) +#define RAD2DEG(x) ((float)(x) * (float)(180.0/M_PI)) + +#endif /* AL_MATH_DEFS_H */ |