JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
made common-sense changes to configure.in
[vor.git] / float.h
1 #ifndef VOR_FLOAT_H
2 #define VOR_FLOAT_H
3
4 #include <math.h>
5
6 #define SMIDGE 0.0001
7
8 // return true if f is OUTSIDE the range [SMIDGE..(max-SMIDGE)]
9 static inline int
10 fclip(float f, float max)
11 {
12         return f < SMIDGE || f >= (max - SMIDGE);
13 }
14
15 static inline float
16 fconstrain(float f, float max)
17 {
18         max -= SMIDGE;
19
20         if(f > max) {
21                 return max;
22         }
23         if(f < SMIDGE) {
24                 return SMIDGE;
25         }
26
27         return f;
28 }
29
30 static inline float
31 fconstrain2(float f, float min, float max)
32 {
33         min += SMIDGE;
34         max -= SMIDGE;
35
36         if(f > max) {
37                 return max;
38         }
39         if(f < min) {
40                 return min;
41         }
42
43         return f;
44 }
45
46 // wrap f so it's within the range [SMIDGE..(max-SMIDGE)]
47 // assumes f is not outside this range by more than (max - (2 * SMIDGE))
48 static inline float
49 fwrap(float f, float max)
50 {
51         float upper = max - SMIDGE;
52         float range = upper - SMIDGE;
53
54         if(f > upper) {
55                 f -= range;
56         }
57         if(f < SMIDGE) {
58                 f += range;
59         }
60
61         return f;
62 }
63
64 #endif // VOR_FLOAT_H