#ifndef LIB_MATH_H #define LIB_MATH_H /** Numbers... */ #define above(a, b) (unsigned_comp(a, b) > 0) #define above_equal(a, b) (unsigned_comp(a, b) >= 0) #define below(a, b) (unsigned_comp(a, b) < 0) #define below_equal(a, b) (unsigned_comp(a, b) <= 0) // for sfall 4.2.3/3.8.23 pure procedure unsigned_comp(variable a, variable b) begin if ((a bwxor b) == 0) then return 0; // a == b return 1 if ((b == 0) orElse a div b) else -1; end #define MAX(x, y) ((x > y) * x + (x <= y) * y) #define MIN(x, y) ((x < y) * x + (x >= y) * y) #define in_range(x, from, to) (x >= from and x <= to) procedure max(variable x, variable y) begin if (x > y) then return x; return y; end procedure min(variable x, variable y) begin if (x < y) then return x; return y; end /*procedure round(variable val) begin variable intp; intp := floor(val); if ((val-intp) >= 0.5) then intp++; return intp; end*/ /*procedure ceil(variable val) begin variable intp; intp := floor(val); if (abs(val-intp) > 0.0) then begin intp++; end return intp; end*/ procedure cap_number(variable num, variable min, variable max) begin if (num > max) then num := max; else if (num < min) then num := min; return num; end #endif