2017-03-30 01:20:44 +07:00
|
|
|
#ifndef LIB_MATH_H
|
|
|
|
|
#define LIB_MATH_H
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
Numbers...
|
|
|
|
|
*/
|
|
|
|
|
|
2020-01-19 12:16:10 +08:00
|
|
|
#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)
|
|
|
|
|
|
|
|
|
|
procedure unsigned_comp(variable a, variable b) begin
|
2020-01-20 11:39:41 +08:00
|
|
|
if ((a bwxor b) == 0) then return 0; // a == b
|
2020-01-19 12:16:10 +08:00
|
|
|
if (b == 0) then return 1;
|
|
|
|
|
return 1 if (a / b) else -1;
|
|
|
|
|
end
|
|
|
|
|
|
2017-03-30 01:20:44 +07:00
|
|
|
#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
|
2017-08-18 09:53:17 +08:00
|
|
|
variable intp;
|
|
|
|
|
intp := floor(val);
|
|
|
|
|
if ((val-intp) >= 0.5) then intp++;
|
|
|
|
|
return intp;
|
2017-03-30 01:20:44 +07:00
|
|
|
end*/
|
|
|
|
|
|
2018-04-28 11:07:37 +08:00
|
|
|
/*procedure ceil(variable val) begin
|
2017-08-18 09:53:17 +08:00
|
|
|
variable intp;
|
|
|
|
|
intp := floor(val);
|
|
|
|
|
if (abs(val-intp) > 0.0) then begin
|
|
|
|
|
intp++;
|
|
|
|
|
end
|
|
|
|
|
return intp;
|
2018-04-28 11:07:37 +08:00
|
|
|
end*/
|
2017-03-30 01:20:44 +07:00
|
|
|
|
|
|
|
|
procedure cap_number(variable num, variable min, variable max) begin
|
2017-08-18 09:53:17 +08:00
|
|
|
if (num > max) then num := max;
|
|
|
|
|
else if (num < min) then num := min;
|
|
|
|
|
return num;
|
2017-03-30 01:20:44 +07:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|