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

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