1#ifndef wren_math_h
2#define wren_math_h
3
4#include <math.h>
5#include <stdint.h>
6
7// A union to let us reinterpret a double as raw bits and back.
8typedef union
9{
10 uint64_t bits64;
11 uint32_t bits32[2];
12 double num;
13} WrenDoubleBits;
14
15#define WREN_DOUBLE_QNAN_POS_MIN_BITS (UINT64_C(0x7FF8000000000000))
16#define WREN_DOUBLE_QNAN_POS_MAX_BITS (UINT64_C(0x7FFFFFFFFFFFFFFF))
17
18#define WREN_DOUBLE_NAN (wrenDoubleFromBits(WREN_DOUBLE_QNAN_POS_MIN_BITS))
19
20static inline double wrenDoubleFromBits(uint64_t bits)
21{
22 WrenDoubleBits data;
23 data.bits64 = bits;
24 return data.num;
25}
26
27static inline uint64_t wrenDoubleToBits(double num)
28{
29 WrenDoubleBits data;
30 data.num = num;
31 return data.bits64;
32}
33
34#endif
35