IMPLEMENTATION MODULE Math; (* Direct libm bindings (names are valid Modula-2 identifiers and match the C symbols). `fabs` is exposed as `abs`. *) PROCEDURE sqrt(x : REAL) : REAL; EXTERNAL; PROCEDURE exp(x : REAL) : REAL; EXTERNAL; PROCEDURE ln(x : REAL) : REAL; EXTERNAL; PROCEDURE sin(x : REAL) : REAL; EXTERNAL; PROCEDURE cos(x : REAL) : REAL; EXTERNAL; PROCEDURE tan(x : REAL) : REAL; EXTERNAL; PROCEDURE asin(x : REAL) : REAL; EXTERNAL; PROCEDURE acos(x : REAL) : REAL; EXTERNAL; PROCEDURE arctan(x : REAL) : REAL; EXTERNAL; PROCEDURE pow(x, y : REAL) : REAL; EXTERNAL; PROCEDURE fabs(x : REAL) : REAL; EXTERNAL; PROCEDURE log10(x : REAL) : REAL; EXTERNAL; PROCEDURE atan2(y, x : REAL) : REAL; EXTERNAL; PROCEDURE sinh(x : REAL) : REAL; EXTERNAL; PROCEDURE cosh(x : REAL) : REAL; EXTERNAL; PROCEDURE tanh(x : REAL) : REAL; EXTERNAL; PROCEDURE hypot(x, y : REAL) : REAL; EXTERNAL; PROCEDURE floor(x : REAL) : REAL; EXTERNAL; PROCEDURE ceil(x : REAL) : REAL; EXTERNAL; PROCEDURE trunc(x : REAL) : REAL; EXTERNAL; PROCEDURE round(x : REAL) : REAL; EXTERNAL; PROCEDURE fmod(x, y : REAL) : REAL; EXTERNAL; PROCEDURE arcsin(x : REAL) : REAL; BEGIN RETURN asin(x) END arcsin; PROCEDURE arccos(x : REAL) : REAL; BEGIN RETURN acos(x) END arccos; PROCEDURE power(x, y : REAL) : REAL; BEGIN RETURN pow(x, y) END power; PROCEDURE abs(x : REAL) : REAL; BEGIN RETURN fabs(x) END abs; END Math.