8 PROCEDURE [code
] IncludeMATH
"#include <math.h>";
9 PROCEDURE [code
] M_PI (): REAL "M_PI";
10 PROCEDURE [code
] sqrt (x
: REAL): REAL "sqrt(x)";
11 PROCEDURE [code
] exp (x
: REAL): REAL "exp(x)";
12 PROCEDURE [code
] log (x
: REAL): REAL "log(x)";
13 PROCEDURE [code
] log10 (x
: REAL): REAL "log10(x)";
14 PROCEDURE [code
] pow (x
, y
: REAL): REAL "pow(x, y)";
15 PROCEDURE [code
] sin (x
: REAL): REAL "sin(x)";
16 PROCEDURE [code
] cos (x
: REAL): REAL "cos(x)";
17 PROCEDURE [code
] tan (x
: REAL): REAL "tan(x)";
18 PROCEDURE [code
] asin (x
: REAL): REAL "asin(x)";
19 PROCEDURE [code
] acos (x
: REAL): REAL "acos(x)";
20 PROCEDURE [code
] atan (x
: REAL): REAL "atan(x)";
21 PROCEDURE [code
] atan2 (y
, x
: REAL): REAL "atan2(y, x)";
22 PROCEDURE [code
] sinh (x
: REAL): REAL "sinh(x)";
23 PROCEDURE [code
] cosh (x
: REAL): REAL "cosh(x)";
24 PROCEDURE [code
] tanh (x
: REAL): REAL "tanh(x)";
25 PROCEDURE [code
] asinh (x
: REAL): REAL "asinh(x)";
26 PROCEDURE [code
] acosh (x
: REAL): REAL "acosh(x)";
27 PROCEDURE [code
] atanh (x
: REAL): REAL "atanh(x)";
28 PROCEDURE [code
] floor (x
: REAL): REAL "floor(x)";
29 PROCEDURE [code
] ceil (x
: REAL): REAL "ceil(x)";
30 PROCEDURE [code
] round (x
: REAL): REAL "round(x)";
31 PROCEDURE [code
] trunc (x
: REAL): REAL "trunc(x)";
32 PROCEDURE [code
] copysign (x
, y
: REAL): REAL "copysign(x, y)";
33 PROCEDURE [code
] frexp (x
: REAL; OUT exp
: INTEGER): REAL "frexp(x, exp)";
34 PROCEDURE [code
] ldexp (x
: REAL; exp
: INTEGER): REAL "ldexp(x, exp)";
36 PROCEDURE Pi
* (): REAL;
41 PROCEDURE Eps
* (): REAL;
46 PROCEDURE Sqrt
* (x
: REAL): REAL;
51 PROCEDURE Exp
* (x
: REAL): REAL;
56 PROCEDURE Ln
* (x
: REAL): REAL;
61 PROCEDURE Log
* (x
: REAL): REAL;
66 PROCEDURE Power
* (x
, y
: REAL): REAL;
71 PROCEDURE IntPower
* (x
: REAL; n
: INTEGER): REAL;
74 IF n
= MIN(INTEGER) THEN RETURN IntPower(x
, n
+ 1) / x
END;
76 IF n
< 0 THEN x
:= 1.0 / x
; n
:= -n
END;
78 IF ODD(n
) THEN y
:= y
* x
; DEC(n
)
79 ELSE x
:= x
* x
; n
:= n
DIV 2
85 PROCEDURE Sin
* (x
: REAL): REAL;
90 PROCEDURE Cos
* (x
: REAL): REAL;
95 PROCEDURE Tan
* (x
: REAL): REAL;
100 PROCEDURE SinCos
* (x
: REAL; OUT s
, c
: REAL);
102 s
:= sin(x
); c
:= cos(x
)
105 PROCEDURE ArcSin
* (x
: REAL): REAL;
110 PROCEDURE ArcCos
* (x
: REAL): REAL;
115 PROCEDURE ArcTan
* (x
: REAL): REAL;
120 PROCEDURE ArcTan2
* (y
, x
: REAL): REAL;
125 PROCEDURE Sinh
* (x
: REAL): REAL;
130 PROCEDURE Cosh
* (x
: REAL): REAL;
135 PROCEDURE Tanh
* (x
: REAL): REAL;
140 PROCEDURE ArcSinh
* (x
: REAL): REAL;
145 PROCEDURE ArcCosh
* (x
: REAL): REAL;
150 PROCEDURE ArcTanh
* (x
: REAL): REAL;
155 PROCEDURE Floor
* (x
: REAL): REAL;
160 PROCEDURE Ceiling
* (x
: REAL): REAL;
165 PROCEDURE Round
* (x
: REAL): REAL;
170 PROCEDURE Trunc
* (x
: REAL): REAL;
175 PROCEDURE Frac
* (x
: REAL): REAL;
177 IF x
>= 0 THEN RETURN x
- ENTIER(x
)
178 ELSE RETURN x
+ ENTIER(-x
)
182 PROCEDURE Mod1
* (x
: REAL): REAL;
187 PROCEDURE Sign
* (x
: REAL): REAL;
189 IF x
> 0 THEN RETURN 1
190 ELSIF x
< 0 THEN RETURN -1
195 PROCEDURE SignBit
* (x
: REAL): BOOLEAN;
197 RETURN copysign(1.0, x
) > 0
200 PROCEDURE CopySign
* (x
, y
: REAL): REAL;
202 RETURN copysign(x
, y
)
205 PROCEDURE Mantissa
* (x
: REAL): REAL;
211 PROCEDURE Exponent
* (x
: REAL): INTEGER;
212 VAR m
: REAL; e
: INTEGER;
218 PROCEDURE Real
* (m
: REAL; e
: INTEGER): REAL;