1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
{ ******************************************************************
Minimum, maximum, sign and exchange
****************************************************************** }
unit uminmax;
interface
uses
utypes;
function FMin(X, Y : Float) : Float; { Minimum of 2 reals }
function FMax(X, Y : Float) : Float; { Maximum of 2 reals }
function IMin(X, Y : Integer) : Integer; { Minimum of 2 integers }
function IMax(X, Y : Integer) : Integer; { Maximum of 2 integers }
function Sgn(X : Float) : Integer; { Sign (returns 1 if X = 0) }
function Sgn0(X : Float) : Integer; { Sign (returns 0 if X = 0) }
function DSgn(A, B : Float) : Float; { Sgn(B) * |A| }
procedure FSwap(var X, Y : Float); { Exchange 2 reals }
procedure ISwap(var X, Y : Integer); { Exchange 2 integers }
implementation
function FMin(X, Y : Float) : Float;
begin
if X <= Y then
FMin := X
else
FMin := Y;
end;
function FMax(X, Y : Float) : Float;
begin
if X >= Y then
FMax := X
else
FMax := Y;
end;
function IMin(X, Y : Integer) : Integer;
begin
if X <= Y then
IMin := X
else
IMin := Y;
end;
function IMax(X, Y : Integer) : Integer;
begin
if X >= Y then
IMax := X
else
IMax := Y;
end;
function Sgn(X : Float) : Integer;
begin
if X >= 0.0 then
Sgn := 1
else
Sgn := - 1;
end;
function Sgn0(X : Float) : Integer;
begin
if X > 0.0 then
Sgn0 := 1
else if X = 0.0 then
Sgn0 := 0
else
Sgn0 := - 1;
end;
function DSgn(A, B : Float) : Float;
begin
if B < 0.0 then DSgn := - Abs(A) else DSgn := Abs(A)
end;
procedure FSwap(var X, Y : Float);
var
Temp : Float;
begin
Temp := X;
X := Y;
Y := Temp;
end;
procedure ISwap(var X, Y : Integer);
var
Temp : Integer;
begin
Temp := X;
X := Y;
Y := Temp;
end;
end.
|