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 |
} |