NW4F Sys
Loading...
Searching...
No Matches
math_Arithmetic.h
Go to the documentation of this file.
1#ifndef NW_MATH_ARITHMETIC_H_
2#define NW_MATH_ARITHMETIC_H_
3
4#include <nw/math/math_Config.h>
5#include <nw/math/math_Constant.h>
6
7#include <cmath>
8
9namespace nw { namespace math {
10
11inline f32
12FSelect(f32 cond, f32 ifPos, f32 ifNeg)
13{
14 f32 ret;
15 ret = (cond >= 0) ? ifPos: ifNeg;
16 return ret;
17}
18
19inline f32
20FAbs(f32 x)
21{
22 f32 ret;
23 ret = ::std::fabs(x);
24 return ret;
25}
26
27inline f32
28FNAbs(f32 x)
29{
30 f32 ret;
31 ret = - FAbs(x);
32 return ret;
33}
34
35inline f32
36FCopySign(f32 abs, f32 sign)
37{
38 f32 pos = FAbs(abs);
39 f32 neg = FNAbs(abs);
40
41 return FSelect(sign, pos, neg);
42}
43
44inline f32
45FExp(f32 x)
46{
47 return ::std::exp(x);
48}
49
50inline f32
51FLog(f32 x)
52{
53 return ::std::log(x);
54}
55
56inline f32
57FLog10(f32 x)
58{
59 return ::std::log10(x);
60}
61
62inline f32
63FMod(f32 x, f32 y)
64{
65 return ::std::fmod(x, y);
66}
67
68inline f32
69FModf(f32 x, f32* y)
70{
71 return ::std::modff(x, y);
72}
73
74inline f32
75FCeil(f32 x)
76{
77 return ::std::ceil(x);
78}
79
80inline f32
81FFloor(f32 x)
82{
83 return ::std::floor(x);
84}
85
86inline s16
88{
89 return s16(x);
90
91}
92
93inline u16
95{
96 return u16(x);
97}
98
99inline f32
101{
102 return f32(x);
103}
104
105inline f32
107{
108 return f32(x);
109}
110
111inline f32
112FInv(f32 x)
113{
114 f32 ix;
115 ix = 1.0f / x;
116 return ix;
117}
118
119inline f32
120FSqrt(f32 x)
121{
122 return ::std::sqrt(x);
123}
124
125inline f32
126FCbrt(f32 x)
127{
128 return ::std::pow(x, 1/3.f);
129}
130
131inline f32
133{
134 return 1.0f / x;
135}
136
137inline f32
138Hermite(f32 v0, f32 t0, f32 v1, f32 t1, f32 s)
139{
140 f32 SS = s * s;
141 f32 SS_S = s * s - s;
142 f32 b1 = SS_S * s - SS_S;
143 f32 b2 = SS_S * s;
144 f32 a2 = SS - 2.f * b2;
145
146 return v0 - a2 * v0 + a2 * v1 + b1 * t0 + b2 * t1;
147}
148
150Hermite(f32 v0, f32 t0, f32 v1, f32 t1, f32 p, f32 d)
151{
152 f32 inv_d = 1 / d;
153 f32 s = p * inv_d;
154 f32 s_1 = s - 1;
155 return v0 + (v0 - v1) * (2 * s - 3) * s * s + s * s_1 * (s_1 * t0 + s * t1);
156}
157
158inline bool IsPwr2(int x) { return 0 == (x & (x - 1)); }
159
160inline int Rightmost1(int x) { return x & (-x); }
161
162inline int Rightmost0(int x) { return ~x & (x + 1); }
163
164} } // namespace nw::math
165
166#endif // NW_MATH_ARITHMETIC_H_
Definition math_Constant.cpp:5
f32 FSqrt(f32 x)
Definition math_Arithmetic.h:120
f32 FSelect(f32 cond, f32 ifPos, f32 ifNeg)
Definition math_Arithmetic.h:12
f32 FModf(f32 x, f32 *y)
Definition math_Arithmetic.h:69
f32 FCeil(f32 x)
Definition math_Arithmetic.h:75
f32 FInv(f32 x)
Definition math_Arithmetic.h:112
f32 FLog10(f32 x)
Definition math_Arithmetic.h:57
f32 FAbs(f32 x)
Definition math_Arithmetic.h:20
f32 FCopySign(f32 abs, f32 sign)
Definition math_Arithmetic.h:36
f32 FExp(f32 x)
Definition math_Arithmetic.h:45
NW_FORCE_INLINE f32 Hermite(f32 v0, f32 t0, f32 v1, f32 t1, f32 p, f32 d)
Definition math_Arithmetic.h:150
f32 S16ToF32(s16 x)
Definition math_Arithmetic.h:106
bool IsPwr2(int x)
Definition math_Arithmetic.h:158
int Rightmost1(int x)
Definition math_Arithmetic.h:160
f32 FMod(f32 x, f32 y)
Definition math_Arithmetic.h:63
s16 F32ToS16(f32 x)
Definition math_Arithmetic.h:87
u16 F32ToU16(f32 x)
Definition math_Arithmetic.h:94
f32 Reciprocal(f32 x)
Definition math_Arithmetic.h:132
f32 FNAbs(f32 x)
Definition math_Arithmetic.h:28
f32 FFloor(f32 x)
Definition math_Arithmetic.h:81
f32 FLog(f32 x)
Definition math_Arithmetic.h:51
f32 FCbrt(f32 x)
Definition math_Arithmetic.h:126
f32 Hermite(f32 v0, f32 t0, f32 v1, f32 t1, f32 s)
Definition math_Arithmetic.h:138
f32 U16ToF32(u16 x)
Definition math_Arithmetic.h:100
int Rightmost0(int x)
Definition math_Arithmetic.h:162
Definition math_Constant.cpp:5
#define NW_FORCE_INLINE
Definition types.h:18