1 |
greg |
2.1 |
#include "gbasic.h" |
2 |
|
|
|
3 |
|
|
|
4 |
|
|
int gb_epsorder(g3Float a,g3Float b) |
5 |
|
|
{ |
6 |
|
|
a = a - b; |
7 |
|
|
return gb_signum(a); |
8 |
|
|
} |
9 |
|
|
|
10 |
|
|
int gb_epseq(g3Float a,g3Float b) |
11 |
|
|
{ |
12 |
|
|
return (fabs(a - b) < GB_EPSILON); |
13 |
|
|
} |
14 |
|
|
|
15 |
|
|
int gb_inrange(g3Float a,g3Float rb,g3Float re) |
16 |
|
|
{ |
17 |
|
|
if (((a >= rb) && (a <= re)) || ((a <= rb) && (a >= re))) |
18 |
|
|
return 1; |
19 |
|
|
return 0; |
20 |
|
|
} |
21 |
|
|
|
22 |
|
|
int gb_signum(g3Float a) |
23 |
|
|
{ |
24 |
|
|
return ((gb_epseq(a,0.0)) ? 0 : ((a < 0.0) ? -1 : 1)); |
25 |
|
|
} |
26 |
|
|
|
27 |
|
|
|
28 |
|
|
g3Float gb_max(g3Float a,g3Float b) |
29 |
|
|
{ |
30 |
|
|
return (a < b) ? b : a; |
31 |
|
|
} |
32 |
|
|
|
33 |
|
|
g3Float gb_min(g3Float a,g3Float b) |
34 |
|
|
{ |
35 |
|
|
return (a < b) ? a : b; |
36 |
|
|
} |
37 |
|
|
|
38 |
|
|
int gb_getroots(g3Float* r1,g3Float* r2,g3Float a,g3Float b,g3Float c) |
39 |
|
|
{ |
40 |
|
|
g3Float d; |
41 |
|
|
if (gb_epseq(a,0.0)) { |
42 |
|
|
if (gb_epseq(b,0.0)) |
43 |
|
|
return 0; |
44 |
|
|
*r1 = *r2 = -c/b; |
45 |
|
|
return 1; |
46 |
|
|
} |
47 |
|
|
d = b*b - 4*a*c; |
48 |
|
|
if (d < -GB_EPSILON) |
49 |
|
|
return 0; |
50 |
|
|
if (gb_epseq(d,0.0)) { |
51 |
|
|
*r1 = *r2 = 0.5*b/a; |
52 |
|
|
return 1; |
53 |
|
|
} |
54 |
|
|
d = sqrt(d); |
55 |
|
|
*r1 = 0.5*(b + d)/a; |
56 |
|
|
*r2 = 0.5*(b - d)/a; |
57 |
|
|
return 2; |
58 |
|
|
} |