28get_nearly_zero_value(
double) {
33get_nearly_zero_value(
float) {
38get_nearly_zero_value(
int) {
47#define IS_THRESHOLD_ZERO(value, threshold) \
48 ((value) < (threshold) && (value) > -(threshold))
52#define IS_THRESHOLD_EQUAL(value1, value2, threshold) \
53 (IS_THRESHOLD_ZERO((value1) - (value2), threshold))
59#define IS_THRESHOLD_COMPEQ(value1, value2, threshold) \
60 (cfloor(value1 / threshold + 0.5f) == cfloor(value2 / threshold + 0.5f))
65#define NEARLY_ZERO(FLOATTYPE) (get_nearly_zero_value((FLOATTYPE)0))
68#define IS_NEARLY_ZERO(value) \
69 (IS_THRESHOLD_ZERO(value, get_nearly_zero_value(value)))
73#define IS_NEARLY_EQUAL(value1, value2) \
74 (IS_THRESHOLD_EQUAL(value1, value2, get_nearly_zero_value(value1)))
79#define MAYBE_ZERO(value) \
80 (IS_NEARLY_ZERO(value) ? 0 : (value))