65 lines
1.4 KiB
C
65 lines
1.4 KiB
C
#pragma once
|
|
|
|
#include <math.h>
|
|
#include <stdint.h>
|
|
|
|
#include "./constant.h"
|
|
|
|
#define MATH_ABS(a) ((a) > 0? (a): -(a))
|
|
|
|
#define MATH_MAX(a, b) ((a) > (b)? (a): (b))
|
|
#define MATH_MIN(a, b) ((a) < (b)? (a): (b))
|
|
|
|
#define MATH_DIFF(a, b) (MATH_MAX(a, b) - MATH_MIN(a, b))
|
|
|
|
#define MATH_CLAMP(x, min, max) ((x) < (min)? (min): (x) > (max)? (max): (x))
|
|
|
|
#define MATH_SIGN(a) (a < 0? -1: a > 0? 1: 0)
|
|
#define MATH_SIGN_NOZERO(a) (a < 0? -1: 1)
|
|
|
|
#define MATH_FLOAT_EQUAL(a, b) (MATH_ABS((a) - (b)) < MATH_EPSILON)
|
|
#define MATH_FLOAT_VALID(a) (!isnan(a) && !isinf(a))
|
|
|
|
|
|
#define decl_next_power2_(type) \
|
|
type##_t math_##type##_next_power2(type##_t x)
|
|
|
|
decl_next_power2_(int8);
|
|
decl_next_power2_(int16);
|
|
decl_next_power2_(int32);
|
|
decl_next_power2_(int64);
|
|
decl_next_power2_(uint8);
|
|
decl_next_power2_(uint16);
|
|
decl_next_power2_(uint32);
|
|
decl_next_power2_(uint64);
|
|
|
|
#undef decl_next_power2_
|
|
|
|
#define decl_gcd_(type) \
|
|
type##_t math_##type##_gcd(type##_t x, type##_t y)
|
|
|
|
decl_gcd_(int8);
|
|
decl_gcd_(int16);
|
|
decl_gcd_(int32);
|
|
decl_gcd_(int64);
|
|
decl_gcd_(uint8);
|
|
decl_gcd_(uint16);
|
|
decl_gcd_(uint32);
|
|
decl_gcd_(uint64);
|
|
|
|
#undef decl_gcd_
|
|
|
|
#define decl_lcm_(type) \
|
|
type##_t math_##type##_lcm(type##_t x, type##_t y)
|
|
|
|
decl_lcm_(int8);
|
|
decl_lcm_(int16);
|
|
decl_lcm_(int32);
|
|
decl_lcm_(int64);
|
|
decl_lcm_(uint8);
|
|
decl_lcm_(uint16);
|
|
decl_lcm_(uint32);
|
|
decl_lcm_(uint64);
|
|
|
|
#undef decl_lcm_
|