Simple Vector Library 1.5 http://www.cs.cmu.edu/~ajw/doc/svl.html
Utils.h@1:e25ff4b06ed2, 2016-01-05 (annotated)
- Committer:
- BartJanssens
- Date:
- Tue Jan 05 13:37:50 2016 +0000
- Revision:
- 1:e25ff4b06ed2
- Parent:
- 0:785cff1e5a7c
fixed va_list bug
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
BartJanssens | 0:785cff1e5a7c | 1 | /* |
BartJanssens | 0:785cff1e5a7c | 2 | File: Utils.h |
BartJanssens | 0:785cff1e5a7c | 3 | |
BartJanssens | 0:785cff1e5a7c | 4 | Function: Various math definitions for VL |
BartJanssens | 0:785cff1e5a7c | 5 | |
BartJanssens | 0:785cff1e5a7c | 6 | Author(s): Andrew Willmott |
BartJanssens | 0:785cff1e5a7c | 7 | |
BartJanssens | 0:785cff1e5a7c | 8 | Copyright: (c) 1995-2001, Andrew Willmott |
BartJanssens | 0:785cff1e5a7c | 9 | */ |
BartJanssens | 0:785cff1e5a7c | 10 | |
BartJanssens | 0:785cff1e5a7c | 11 | #ifndef __VL_MATH__ |
BartJanssens | 0:785cff1e5a7c | 12 | #define __VL_MATH__ |
BartJanssens | 0:785cff1e5a7c | 13 | |
BartJanssens | 0:785cff1e5a7c | 14 | //#include <cstdlib> |
BartJanssens | 0:785cff1e5a7c | 15 | |
BartJanssens | 0:785cff1e5a7c | 16 | // --- Inlines ---------------------------------------------------------------- |
BartJanssens | 0:785cff1e5a7c | 17 | |
BartJanssens | 0:785cff1e5a7c | 18 | // additions to arithmetic functions |
BartJanssens | 0:785cff1e5a7c | 19 | |
BartJanssens | 0:785cff1e5a7c | 20 | #ifdef VL_HAS_IEEEFP |
BartJanssens | 0:785cff1e5a7c | 21 | #include <ieeefp.h> |
BartJanssens | 0:785cff1e5a7c | 22 | #define vl_is_finite(X) finite(X) |
BartJanssens | 0:785cff1e5a7c | 23 | #elif defined (__GNUC__) && defined(__USE_MISC) |
BartJanssens | 0:785cff1e5a7c | 24 | #define vl_is_finite(X) finite(X) |
BartJanssens | 0:785cff1e5a7c | 25 | #else |
BartJanssens | 0:785cff1e5a7c | 26 | #define vl_is_finite(X) (1) |
BartJanssens | 0:785cff1e5a7c | 27 | #endif |
BartJanssens | 0:785cff1e5a7c | 28 | |
BartJanssens | 0:785cff1e5a7c | 29 | #ifdef VL_HAS_DRAND |
BartJanssens | 0:785cff1e5a7c | 30 | inline Double vl_rand() |
BartJanssens | 0:785cff1e5a7c | 31 | { return(drand48()); } |
BartJanssens | 0:785cff1e5a7c | 32 | #else |
BartJanssens | 0:785cff1e5a7c | 33 | #ifndef RAND_MAX |
BartJanssens | 0:785cff1e5a7c | 34 | // we're on something totally sucky, like SunOS |
BartJanssens | 0:785cff1e5a7c | 35 | #define RAND_MAX (Double(1 << 30) * 4.0 - 1.0) |
BartJanssens | 0:785cff1e5a7c | 36 | #endif |
BartJanssens | 0:785cff1e5a7c | 37 | inline Double vl_rand() |
BartJanssens | 0:785cff1e5a7c | 38 | { return(rand() / (RAND_MAX + 1.0)); } |
BartJanssens | 0:785cff1e5a7c | 39 | #endif |
BartJanssens | 0:785cff1e5a7c | 40 | |
BartJanssens | 0:785cff1e5a7c | 41 | #ifndef __CMATH__ |
BartJanssens | 0:785cff1e5a7c | 42 | // GNU's complex.h defines its own abs(double) |
BartJanssens | 0:785cff1e5a7c | 43 | #ifdef VL_HAS_ABSF |
BartJanssens | 0:785cff1e5a7c | 44 | inline Float abs(Float x) |
BartJanssens | 0:785cff1e5a7c | 45 | { return (fabsf(x)); } |
BartJanssens | 0:785cff1e5a7c | 46 | #endif |
BartJanssens | 0:785cff1e5a7c | 47 | // jmc ......... 7/19 |
BartJanssens | 0:785cff1e5a7c | 48 | //inline Double abs(Double x) |
BartJanssens | 0:785cff1e5a7c | 49 | //{ return (fabs(x)); } |
BartJanssens | 0:785cff1e5a7c | 50 | #endif |
BartJanssens | 0:785cff1e5a7c | 51 | #ifdef VL_HAS_ABSF |
BartJanssens | 0:785cff1e5a7c | 52 | inline Float len(Float x) |
BartJanssens | 0:785cff1e5a7c | 53 | { return (fabsf(x)); } |
BartJanssens | 0:785cff1e5a7c | 54 | #endif |
BartJanssens | 0:785cff1e5a7c | 55 | inline Double len(Double x) |
BartJanssens | 0:785cff1e5a7c | 56 | { return (fabs(x)); } |
BartJanssens | 0:785cff1e5a7c | 57 | |
BartJanssens | 0:785cff1e5a7c | 58 | inline Float sqrlen(Float r) |
BartJanssens | 0:785cff1e5a7c | 59 | { return(sqr(r)); } |
BartJanssens | 0:785cff1e5a7c | 60 | inline Double sqrlen(Double r) |
BartJanssens | 0:785cff1e5a7c | 61 | { return(sqr(r)); } |
BartJanssens | 0:785cff1e5a7c | 62 | |
BartJanssens | 0:785cff1e5a7c | 63 | inline Float mix(Float a, Float b, Float s) |
BartJanssens | 0:785cff1e5a7c | 64 | { return((1.0f - s) * a + s * b); } |
BartJanssens | 0:785cff1e5a7c | 65 | inline Double mix(Double a, Double b, Double s) |
BartJanssens | 0:785cff1e5a7c | 66 | { return((1.0 - s) * a + s * b); } |
BartJanssens | 0:785cff1e5a7c | 67 | |
BartJanssens | 0:785cff1e5a7c | 68 | inline Double sign(Double d) |
BartJanssens | 0:785cff1e5a7c | 69 | { |
BartJanssens | 0:785cff1e5a7c | 70 | if (d < 0) |
BartJanssens | 0:785cff1e5a7c | 71 | return(-1.0); |
BartJanssens | 0:785cff1e5a7c | 72 | else |
BartJanssens | 0:785cff1e5a7c | 73 | return(1.0); |
BartJanssens | 0:785cff1e5a7c | 74 | } |
BartJanssens | 0:785cff1e5a7c | 75 | |
BartJanssens | 0:785cff1e5a7c | 76 | // useful routines |
BartJanssens | 0:785cff1e5a7c | 77 | |
BartJanssens | 0:785cff1e5a7c | 78 | inline Bool IsPowerOfTwo(Int a) |
BartJanssens | 0:785cff1e5a7c | 79 | { return((a & -a) == a); }; |
BartJanssens | 0:785cff1e5a7c | 80 | |
BartJanssens | 0:785cff1e5a7c | 81 | inline Void SetReal(Float &a, Double b) |
BartJanssens | 0:785cff1e5a7c | 82 | { a = Float(b); } |
BartJanssens | 0:785cff1e5a7c | 83 | inline Void SetReal(Double &a, Double b) |
BartJanssens | 0:785cff1e5a7c | 84 | { a = b; } |
BartJanssens | 0:785cff1e5a7c | 85 | |
BartJanssens | 0:785cff1e5a7c | 86 | #endif |