ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/gbasic.c
Revision: 2.1
Committed: Wed Aug 12 23:07:59 2015 UTC (8 years, 8 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, rad5R2, rad5R3, rad5R0, rad5R1, HEAD
Log Message:
Added Jan Wienold's evalglare to distribution

File Contents

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