23#define PI (3.1415926535897932384626433832795028841971693993751)
28#define N_PI (Math::scalar(PI))
32#define N_PI_DOUBLE (Math::scalar(6.283185307179586476925286766559))
36#define N_PI_HALF (Math::scalar(1.5707963267948966192313216916398f))
41#define TINY (0.0000001f)
50#define PI (3.1415926535897932384626433832795028841971693993751)
54#define N_PI (Math::scalar(3.1415926535897932384626433832795028841971693993751))
97 struct {
int x,
y,
z; };
115 struct {
unsigned int x,
y; };
124 struct {
unsigned int x,
y,
z; };
133 struct {
unsigned int x,
y,
z,
w; };
175 return min + unit * diff;
280 static const scalar rev =
scalar(6.283185307179586476925286766559);
281 return n_fmod(a,rev);
283 static const scalar REVOLUTION =
scalar(6.283185307179586476925286766559);
286 temp = temp - floorf(temp/REVOLUTION) * REVOLUTION;
288 temp = a<0 ? -temp:temp;
340 return fchop(floorf(f + 0.5f));
360 return ((f > (-tol)) && (f < tol));
366template<
typename TYPE>
370 return (a > b) ? a : b;
376template<
typename TYPE0,
typename ...TYPEN>
378max(TYPE0 first, TYPE0 second, TYPEN... rest)
380 return first > second ?
max(first, std::forward<TYPEN>(rest)...) :
max(second, std::forward<TYPEN>(rest)...);
388__forceinline
unsigned int
389max(
unsigned int a,
unsigned int b)
391 return a ^ ((a ^ b) & -(a < b));
397template<
typename TYPE>
401 return (a < b) ? a : b;
407template<
typename TYPEA,
typename TYPEB>
411 return (a < b) ? a : b;
419__forceinline
unsigned int
420min(
unsigned int a,
unsigned int b)
422 return b ^ ((a ^ b) & -(a < b));
430__forceinline uint16_t
431min(uint16_t a, uint16_t b)
433 return b ^ ((a ^ b) & -(a < b));
439template<
typename TYPE0,
typename ...TYPEN>
441min(TYPE0 first, TYPE0 second, TYPEN... rest)
443 return first < second ? min(first, std::forward<TYPEN>(rest)...) :
min(second, std::forward<TYPEN>(rest)...);
453 return (a < 0.0f) ? -a : a;
462 return (a < 0.0) ? -a : a;
471 return (a < 0) ? -a : a;
480 return (a < 0.0f) ? -1.0f : 1.0f;
486__forceinline
constexpr scalar
495__forceinline
constexpr scalar
506clamp(
float val,
float minVal,
float maxVal)
508 if (val < minVal)
return minVal;
509 else if (val > maxVal)
return maxVal;
518clamp(int64_t val, int64_t minVal, int64_t maxVal)
520 if (val < minVal)
return minVal;
521 else if (val > maxVal)
return maxVal;
530clamp(int32_t val, int32_t minVal, int32_t maxVal)
532 if (val < minVal)
return minVal;
533 else if (val > maxVal)
return maxVal;
574 return ((f0 - f1) < tol);
584 return ((f0 - f1) > tol);
594 if (val < 0.0f)
return 0.0f;
595 else if (val > 1.0f)
return 1.0f;
606 if (val < 0.0)
return 0.0;
607 else if (val > 1.0)
return 1.0;
618 return x + l * (y - x);
630 scalar dist = normTo - normFrom;
635 else if (dist >
deg2rad(180.0f))
650 union {
scalar s;
unsigned int u; } pun;
652 return ((pun.u&0x7f800000)==0);
654 return (((*(
unsigned int*)&s)&0x7f800000)==0);
682 return abs(a - b) <= epsilon;
701 x =
saturate((x - edge0) / (edge1 - edge0));
713 int range =
max -
min + 1;
714 int unit =
::rand() % range;
727 bool res = _BitScanReverse(&ret, val);
732 ret = __builtin_clz(val);
740__forceinline
unsigned int
741align(
unsigned int alignant,
unsigned int alignment)
743 return (alignant + alignment - 1) & ~(alignment - 1);
749__forceinline uintptr_t
752 return (alignant + alignment - 1) & ~(alignment - 1);
758__forceinline
unsigned int
761 return (alignant / alignment * alignment);
767__forceinline uintptr_t
770 return (alignant / alignment * alignment);
777__forceinline
unsigned int
780 return (dividend % divider != 0) ? (dividend / divider + 1) : (dividend / divider);
787__forceinline
unsigned int
809__forceinline uint64_t
812 uint64_t t = state.x[0];
813 uint64_t
const s = state.x[1];
826__forceinline uint32_t
829 return (uint32_t) (((uintptr_t)(
void *)ptr) % 4294967291u);
840 return (
float)value / 65535.0f;
850 return Math::max((
float)value / 32767.0f, -1.0f);
860 return (
float)value / 255.0f;
870 return Math::max((
float)value / 127.0f, -1.0f);
880operator"" _rad(
long double deg)
889operator"" _rad(
unsigned long long deg)
899operator"" _deg(
long double rad)
908operator"" _deg(
unsigned long long deg)
Different curves.
Definition angularpfeedbackloop.h:17
__forceinline uintptr_t alignptr(uintptr_t alignant, uintptr_t alignment)
Definition scalar.h:750
__forceinline float undenormalize(scalar s)
Returns 0 if scalar is denormal.
Definition scalar.h:663
__forceinline constexpr scalar rad2deg(scalar r)
Definition scalar.h:496
__forceinline int mostsignificant(unsigned int val)
Returns the position of the most significant bit of the number.
Definition scalar.h:723
__forceinline bool fequal(scalar f0, scalar f1, scalar tol)
A fuzzy floating point equality check.
Definition scalar.h:357
__forceinline scalar cot(scalar x)
Definition scalar.h:689
__forceinline scalar sqrt(scalar x)
Definition scalar.h:236
__forceinline scalar log(scalar x)
get logarithm of x
Definition scalar.h:319
__forceinline unsigned int align_down(unsigned int alignant, unsigned int alignment)
Definition scalar.h:759
__forceinline constexpr scalar deg2rad(scalar d)
Definition scalar.h:487
__forceinline scalar asin(scalar x)
Definition scalar.h:209
__forceinline scalar saturate(scalar val)
Saturate a value (clamps between 0.0f and 1.0f)
Definition scalar.h:592
__forceinline uint32_t pointerhash(void *ptr)
cheap pointer hash using modulo with a mersenne prime
Definition scalar.h:827
__forceinline scalar log2(scalar f)
log2() function.
Definition scalar.h:300
__forceinline int fchop(scalar f)
Chop float to int.
Definition scalar.h:246
float normtofloat(uint16_t value)
convert normalized uint16_t to float
Definition scalar.h:838
__forceinline int frnd(scalar f)
Round float to integer.
Definition scalar.h:338
__forceinline float round(float val)
Floating point rounding.
Definition scalar.h:562
__forceinline float ceil(float val)
Floating point ceiling.
Definition scalar.h:542
__forceinline float lerp(float x, float y, float l)
Linearly interpolate between 2 values: ret = x + l * (y - x)
Definition scalar.h:616
__forceinline scalar modangle(scalar a)
Normalize an angular value into the range rad(0) to rad(360).
Definition scalar.h:277
__forceinline int irand(int min, int max)
Return a pseudo integer random number between min and max.
Definition scalar.h:711
__forceinline scalar pow(scalar x, scalar y)
Definition scalar.h:347
__forceinline float clamp(float val, float minVal, float maxVal)
Float clamping.
Definition scalar.h:506
__forceinline unsigned int align(unsigned int alignant, unsigned int alignment)
Definition scalar.h:741
__forceinline scalar rand()
Return a pseudo random number between 0 and 1.
Definition scalar.h:161
__forceinline TYPE min(TYPE a, TYPE b)
Definition scalar.h:399
__forceinline scalar fract(scalar x)
Definition scalar.h:265
__forceinline bool isdenormal(scalar s)
Returns true if the input scalar is denormalized (#DEN)
Definition scalar.h:647
double float64
Definition scalar.h:47
__forceinline scalar smoothstep(scalar edge0, scalar edge1, scalar x)
Definition scalar.h:698
__forceinline scalar angulardistance(scalar from, scalar to)
Get angular distance.
Definition scalar.h:626
float scalar
Definition scalar.h:45
__forceinline uintptr_t align_downptr(uintptr_t alignant, uintptr_t alignment)
Definition scalar.h:768
__forceinline scalar exp(scalar x)
Definition scalar.h:328
__forceinline scalar exp2(scalar x)
Definition scalar.h:309
__forceinline uint64_t randxor(randxorstate &state)
Definition scalar.h:810
__forceinline TYPE max(TYPE a, TYPE b)
Definition scalar.h:368
__forceinline scalar sgn(scalar a)
Definition scalar.h:478
__forceinline scalar abs(scalar a)
Definition scalar.h:451
__forceinline scalar cos(scalar x)
Definition scalar.h:191
__forceinline unsigned int divandroundup(unsigned int dividend, unsigned int divider)
Integer division with rounding.
Definition scalar.h:778
__forceinline scalar acos(scalar x)
Definition scalar.h:218
__forceinline bool nearequal(const point &v0, const point &v1, float epsilon)
Definition point.h:485
__forceinline scalar sin(scalar x)
Definition scalar.h:182
__forceinline bool fless(scalar f0, scalar f1, scalar tol)
A fuzzy floating point less-then check.
Definition scalar.h:572
__forceinline bool fgreater(scalar f0, scalar f1, scalar tol)
A fuzzy floating point greater-then check.
Definition scalar.h:582
__forceinline unsigned int roundtopow2(unsigned int val)
Rounds up to next power of 2.
Definition scalar.h:788
__forceinline scalar atan(scalar x)
Definition scalar.h:227
__forceinline float floor(float val)
Floating point flooring.
Definition scalar.h:552
__forceinline scalar tan(scalar x)
Definition scalar.h:200
float float32
Definition scalar.h:46
__forceinline scalar fmod(scalar x, scalar y)
Definition scalar.h:256
#define N_PI
Definition scalar.h:28
byte y
Definition scalar.h:151
byte w
Definition scalar.h:151
byte z
Definition scalar.h:151
unsigned int v
Definition scalar.h:152
byte x
Definition scalar.h:151
ubyte x
Definition scalar.h:142
unsigned int v
Definition scalar.h:143
ubyte z
Definition scalar.h:142
ubyte w
Definition scalar.h:142
ubyte y
Definition scalar.h:142
scalar x
Definition scalar.h:61
scalar v[2]
Definition scalar.h:62
scalar y
Definition scalar.h:61
scalar x
Definition scalar.h:70
scalar y
Definition scalar.h:70
scalar v[3]
Definition scalar.h:71
scalar z
Definition scalar.h:70
scalar x
Definition scalar.h:79
scalar v[4]
Definition scalar.h:80
scalar y
Definition scalar.h:79
scalar w
Definition scalar.h:79
scalar z
Definition scalar.h:79
int v[2]
Definition scalar.h:89
int y
Definition scalar.h:88
int x
Definition scalar.h:88
int x
Definition scalar.h:97
int z
Definition scalar.h:97
int v[3]
Definition scalar.h:98
int y
Definition scalar.h:97
int z
Definition scalar.h:106
int w
Definition scalar.h:106
int x
Definition scalar.h:106
int y
Definition scalar.h:106
int v[4]
Definition scalar.h:107
fast random generator based on xorshift+
Definition scalar.h:805
uint64_t x[2]
Definition scalar.h:806
unsigned int x
Definition scalar.h:115
unsigned int v[2]
Definition scalar.h:116
unsigned int y
Definition scalar.h:115
unsigned int z
Definition scalar.h:124
unsigned int y
Definition scalar.h:124
unsigned int v[3]
Definition scalar.h:125
unsigned int x
Definition scalar.h:124
unsigned int w
Definition scalar.h:133
unsigned int z
Definition scalar.h:133
unsigned int x
Definition scalar.h:133
unsigned int y
Definition scalar.h:133
unsigned int v[4]
Definition scalar.h:134
unsigned char ubyte
Definition types.h:36