54# define NAN_FLT __builtin_nanf("")
57# define NAN_FLT (*((float *)(&NAN_INT)))
64#ifdef BLI_MATH_GCC_WARN_PRAGMA
65# pragma GCC diagnostic push
66# pragma GCC diagnostic ignored "-Wredundant-decls"
306#ifdef BLI_MATH_GCC_WARN_PRAGMA
307# pragma GCC diagnostic pop
315# define BLI_ASSERT_UNIT_EPSILON 0.0002f
316# define BLI_ASSERT_UNIT_EPSILON_DB 0.0002
322# define BLI_ASSERT_UNIT_V3(v) \
324 const float _test_unit = len_squared_v3(v); \
325 BLI_assert(!(fabsf(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON) || \
326 !(fabsf(_test_unit) >= BLI_ASSERT_UNIT_EPSILON)); \
330# define BLI_ASSERT_UNIT_V2(v) \
332 const float _test_unit = len_squared_v2(v); \
333 BLI_assert(!(fabsf(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON) || \
334 !(fabsf(_test_unit) >= BLI_ASSERT_UNIT_EPSILON)); \
338# define BLI_ASSERT_UNIT_QUAT(q) \
340 const float _test_unit = dot_qtqt(q, q); \
341 BLI_assert(!(fabsf(_test_unit - 1.0f) >= BLI_ASSERT_UNIT_EPSILON * 10) || \
342 !(fabsf(_test_unit) >= BLI_ASSERT_UNIT_EPSILON * 10)); \
346# define BLI_ASSERT_ZERO_M3(m) \
348 BLI_assert(dot_vn_vn((const float *)m, (const float *)m, 9) != 0.0); \
352# define BLI_ASSERT_ZERO_M4(m) \
354 BLI_assert(dot_vn_vn((const float *)m, (const float *)m, 16) != 0.0); \
357# define BLI_ASSERT_UNIT_M3(m) \
359 BLI_ASSERT_UNIT_V3((m)[0]); \
360 BLI_ASSERT_UNIT_V3((m)[1]); \
361 BLI_ASSERT_UNIT_V3((m)[2]); \
365# define BLI_ASSERT_UNIT_V2(v) (void)(v)
366# define BLI_ASSERT_UNIT_V3(v) (void)(v)
367# define BLI_ASSERT_UNIT_QUAT(v) (void)(v)
368# define BLI_ASSERT_ZERO_M3(m) (void)(m)
369# define BLI_ASSERT_ZERO_M4(m) (void)(m)
370# define BLI_ASSERT_UNIT_M3(m) (void)(m)
MINLINE int round_fl_to_int_clamp(float a)
MINLINE unsigned char round_fl_to_uchar(float a)
MINLINE float max_fff(float a, float b, float c)
MINLINE int integer_digits_f(float f)
MINLINE uint ceil_to_multiple_u(uint a, uint b)
MINLINE double max_ddd(double a, double b, double c)
MINLINE uint min_uu(uint a, uint b)
MINLINE float max_ffff(float a, float b, float c, float d)
MINLINE unsigned int log2_ceil_u(unsigned int x)
MINLINE int power_of_2_min_i(int n)
MINLINE int round_fl_to_int(float a)
MINLINE short round_db_to_short_clamp(double a)
MINLINE float max_ff(float a, float b)
int pow_i(int base, int exp)
MINLINE int min_ii(int a, int b)
MINLINE uint divide_ceil_u(uint a, uint b)
MINLINE int power_of_2_max_i(int n)
MINLINE int integer_digits_d(double d)
MINLINE float min_ffff(float a, float b, float c, float d)
MINLINE unsigned int power_of_2_max_u(unsigned int x)
MINLINE uint max_uu(uint a, uint b)
MINLINE int cube_i(int a)
MINLINE float pow2f(float x)
MINLINE float increment_ulp(float value)
MINLINE double ratiod(double min, double max, double pos)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float min_ff(float a, float b)
MINLINE int square_i(int a)
MINLINE int max_ii(int a, int b)
MINLINE short round_fl_to_short(float a)
MINLINE uint64_t divide_ceil_ul(uint64_t a, uint64_t b)
MINLINE double min_dd(double a, double b)
float floor_power_of_10(float f)
MINLINE float cube_f(float a)
MINLINE int integer_digits_i(int i)
MINLINE unsigned char round_fl_to_uchar_clamp(float a)
MINLINE int min_iii(int a, int b, int c)
MINLINE float floored_fmod(float f, float n)
MINLINE int divide_round_i(int a, int b)
MINLINE int mod_i(int i, int n)
MINLINE float power_of_2(float f)
MINLINE float decrement_ulp(float value)
MINLINE float square_f(float a)
MINLINE unsigned int round_fl_to_uint(float a)
MINLINE float sqrtf_signed(float f)
MINLINE double max_dd(double a, double b)
MINLINE uint ulp_diff_ff(float a, float b)
MINLINE int round_db_to_int_clamp(double a)
MINLINE int is_power_of_2_i(int n)
MINLINE float pow3f(float x)
MINLINE double sqrt3d(double d)
MINLINE float interpf(float target, float origin, float t)
MINLINE int round_db_to_int(double a)
MINLINE int max_iiii(int a, int b, int c, int d)
MINLINE float min_fff(float a, float b, float c)
MINLINE int signum_i_ex(float a, float eps)
MINLINE int min_iiii(int a, int b, int c, int d)
MINLINE unsigned int log2_floor_u(unsigned int x)
MINLINE double interpd(double target, double origin, double t)
MINLINE float signf(float f)
MINLINE int max_iii(int a, int b, int c)
float ceil_power_of_10(float f)
MINLINE bool compare_threshold_relative(float value1, float value2, float thresh)
MINLINE int clamp_i(int value, int min, int max)
MINLINE int signum_i(float a)
MINLINE float ratiof(float min, float max, float pos)
MINLINE float round_to_even(float f)
double double_round(double x, int ndigits)
MINLINE unsigned int square_uint(unsigned int a)
MINLINE int square_s(short a)
MINLINE uint64_t ceil_to_multiple_ul(uint64_t a, uint64_t b)
MINLINE int compare_ff_relative(float a, float b, float max_diff, int max_ulps)
MINLINE unsigned char round_db_to_uchar_clamp(double a)
MINLINE int compare_ff(float a, float b, float max_diff)
MINLINE float pow4f(float x)
MINLINE float sqrt3f(float f)
MINLINE float pow7f(float x)
unsigned long long int uint64_t