18 #include "dtoolbase.h"
29 get_nearly_zero_value(
double) {
34 get_nearly_zero_value(
float) {
39 get_nearly_zero_value(
int) {
48 #define IS_THRESHOLD_ZERO(value, threshold) \
49 ((value) < (threshold) && (value) > -(threshold))
53 #define IS_THRESHOLD_EQUAL(value1, value2, threshold) \
54 (IS_THRESHOLD_ZERO((value1) - (value2), threshold))
61 #define IS_THRESHOLD_COMPEQ(value1, value2, threshold) \
62 (cfloor(value1 / threshold + 0.5f) == cfloor(value2 / threshold + 0.5f))
67 #define NEARLY_ZERO(FLOATTYPE) (get_nearly_zero_value((FLOATTYPE)0))
71 #define IS_NEARLY_ZERO(value) \
72 (IS_THRESHOLD_ZERO(value, get_nearly_zero_value(value)))
76 #define IS_NEARLY_EQUAL(value1, value2) \
77 (IS_THRESHOLD_EQUAL(value1, value2, get_nearly_zero_value(value1)))
82 #define MAYBE_ZERO(value) \
83 (IS_NEARLY_ZERO(value) ? 0 : (value))