XenevaOS
Loading...
Searching...
No Matches
math.h
Go to the documentation of this file.
1
12#ifndef NS_QJS_MATH_H
13#define NS_QJS_MATH_H
14
15#include <stdint.h>
16#include <string.h>
17
18/* ---- XEClib double subset (same functions, same names) ---- */
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23double ceil(double);
24double cos(double);
25double fabs(double);
26double floor(double);
27double fmod(double, double);
28double modf(double, double*);
29double pow(double, double);
30double sin(double);
31double sqrt(double);
32double tan(double);
33float ceilf(float);
34float acosf(float);
35float cosf(float);
36float fabsf(float);
37float floorf(float);
38float fmodf(float, float);
39float sinf(float);
40float sqrtf(float);
41float tanf(float);
42float atanf(float);
43float atan2f(float, float);
44double frexp(double, int*);
45float roundf(float);
46float fmaxf(float, float);
47float fminf(float, float);
48int fpclassify(double);
49
50/* ---- double-precision gap, implemented in port/libm.c ---- */
51double acos(double);
52double acosh(double);
53double asin(double);
54double asinh(double);
55double atan(double);
56double atan2(double, double);
57double atanh(double);
58double cbrt(double);
59double cosh(double);
60double exp(double);
61double expm1(double);
62double fmax(double, double);
63double fmin(double, double);
64double hypot(double, double);
65double log(double);
66double log10(double);
67double log1p(double);
68double log2(double);
69long lrint(double);
70double round(double);
71double sinh(double);
72double tanh(double);
73double trunc(double);
74
75#ifdef __cplusplus
76}
77#endif
78
79/* ---- constants / classification macros ---- */
80
81#define M_E 2.7182818284590452354
82#define M_LOG2E 1.4426950408889634074
83#define M_LOG10E 0.43429448190325182765
84#define M_LN2 0.69314718055994530942
85#define M_LN10 2.30258509299404568402
86#define M_PI 3.14159265358979323846
87#define M_PI_2 1.57079632679489661923
88#define M_PI_4 0.78539816339744830962
89#define M_1_PI 0.31830988618379067154
90#define M_2_PI 0.63661977236758134308
91#define M_2_SQRTPI 1.12837916709551257390
92#define M_SQRT2 1.41421356237309504880
93#define M_SQRT1_2 0.70710678118654752440
94
95#define HUGE_VAL ((double)__builtin_huge_val())
96#define HUGE_VALF ((float)__builtin_huge_valf())
97#define INFINITY ((float)__builtin_inff() + 0.0)
98#define NAN ((float)__builtin_nanf("") + 0.0)
99
101 float f;
103};
104
106 double d;
108};
109
110static inline uint32_t ns_fpclassify_pattern(double x) {
111 union ns_qjs_double_bits b;
112 b.d = x;
113 uint32_t hi = (uint32_t)(b.i >> 32);
114 uint32_t mant = hi & 0x000fffffu;
115 uint32_t expn = hi >> 20;
116 if (expn == 0)
117 return (mant == 0) ? 0 /* zero */ : 3 /* sub */;
118 if (expn == 0x7ff)
119 return (mant == 0) ? 1 /* inf */ : 4 /* nan */;
120 return 2 /* normal */;
121}
122
123static inline int signbit(double x) {
124 union ns_qjs_double_bits b;
125 b.d = x;
126 return (int)((b.i >> 63) & 1u);
127}
128
129/* FP_ZERO / FP_NORMAL / FP_SUBNORMAL / FP_INFINITE / FP_NAN indexes match
130 * the XEClib math.h enum { FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL,
131 * FP_NORMAL } to keep isnan/isfinite behavior identical to the rest of
132 * the OS. */
133#define FP_NAN 4
134#define FP_INFINITE 1
135#define FP_ZERO 0
136#define FP_SUBNORMAL 3
137#define FP_NORMAL 2
138
139#define fpclassify(x) (ns_fpclassify_pattern(x))
140
141#define isfinite(x) (ns_fpclassify_pattern(x) != FP_NAN && ns_fpclassify_pattern(x) != FP_INFINITE)
142#define isnormal(x) (ns_fpclassify_pattern(x) == FP_NORMAL)
143#define isnan(x) (ns_fpclassify_pattern(x) == FP_NAN)
144#define isinf(x) (ns_fpclassify_pattern(x) == FP_INFINITE)
145
146#endif
XE_LIB double frexp(double x, int *exp)
Definition math.cpp:297
XE_LIB double pow(double, double)
Definition math.cpp:173
XE_LIB double sqrt(double)
Definition math.cpp:267
XE_LIB double tan(double)
Definition math.cpp:285
XE_LIB double floor(double)
Definition math.cpp:140
XE_LIB double fabs(double)
Definition math.cpp:126
XE_LIB double cos(double)
Definition math.cpp:62
XE_LIB float fabsf(float)
Definition math.cpp:133
XE_LIB double fmod(double, double)
Definition math.cpp:150
XE_LIB float atan2f(float y, float x)
Definition atan2f.cpp:35
XE_LIB float fminf(float a, float b)
Definition math.cpp:377
XE_LIB float fmaxf(float a, float b)
Definition math.cpp:373
XE_LIB float floorf(float)
Definition math.cpp:145
XE_LIB double sin(double)
Definition math.cpp:190
XE_LIB double modf(double, double *)
Definition math.cpp:162
XE_LIB float atanf(float x)
Definition atanf.cpp:25
XE_LIB float sqrtf(float x)
Definition math.cpp:293
XE_LIB float tanf(float)
Definition math.cpp:289
XE_LIB double ceil(double)
Definition math.cpp:52
XE_LIB float roundf(float x)
Definition roundf.cpp:15
XE_LIB float fmodf(float x, float y)
Definition fmodf.cpp:10
XE_LIB float sinf(float)
Definition math.cpp:222
XE_LIB float ceilf(float x)
Definition ceilf.cpp:3
XE_LIB float cosf(float)
Definition math.cpp:94
XE_LIB float acosf(float x)
Definition acosf.cpp:45
double round(double)
Definition libm.c:95
double atan2(double, double)
Definition libm.c:229
double hypot(double, double)
Definition libm.c:154
double tanh(double)
Definition libm.c:439
double cosh(double)
Definition libm.c:412
double fmin(double, double)
Definition libm.c:146
double acos(double)
Definition libm.c:264
long lrint(double)
Definition libm.c:104
double trunc(double)
Definition libm.c:89
double sinh(double)
Definition libm.c:387
#define fpclassify(x)
Definition math.h:139
double log1p(double)
Definition libm.c:357
double fmax(double, double)
Definition libm.c:138
double atanh(double)
Definition libm.c:474
double acosh(double)
Definition libm.c:460
double expm1(double)
Definition libm.c:306
double log10(double)
Definition libm.c:383
double atan(double)
Definition libm.c:205
double log2(double)
Definition libm.c:379
double asinh(double)
Definition libm.c:449
double cbrt(double)
Definition libm.c:173
double asin(double)
Definition libm.c:254
double log(double)
Definition libm.c:326
size_t b
Definition main.cpp:156
unsigned int uint32_t
Definition acefiex.h:163
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
float exp(float x)
Definition audioCtrl.cpp:53
int x
Definition layout.c:118
Definition math.h:105
uint64_t i
Definition math.h:107
double d
Definition math.h:106
Definition math.h:100
uint32_t i
Definition math.h:102
float f
Definition math.h:101