Simple Vector Library 1.5 http://www.cs.cmu.edu/~ajw/doc/svl.html
Utils.h
- Committer:
- BartJanssens
- Date:
- 2016-01-05
- Revision:
- 1:e25ff4b06ed2
- Parent:
- 0:785cff1e5a7c
File content as of revision 1:e25ff4b06ed2:
/* File: Utils.h Function: Various math definitions for VL Author(s): Andrew Willmott Copyright: (c) 1995-2001, Andrew Willmott */ #ifndef __VL_MATH__ #define __VL_MATH__ //#include <cstdlib> // --- Inlines ---------------------------------------------------------------- // additions to arithmetic functions #ifdef VL_HAS_IEEEFP #include <ieeefp.h> #define vl_is_finite(X) finite(X) #elif defined (__GNUC__) && defined(__USE_MISC) #define vl_is_finite(X) finite(X) #else #define vl_is_finite(X) (1) #endif #ifdef VL_HAS_DRAND inline Double vl_rand() { return(drand48()); } #else #ifndef RAND_MAX // we're on something totally sucky, like SunOS #define RAND_MAX (Double(1 << 30) * 4.0 - 1.0) #endif inline Double vl_rand() { return(rand() / (RAND_MAX + 1.0)); } #endif #ifndef __CMATH__ // GNU's complex.h defines its own abs(double) #ifdef VL_HAS_ABSF inline Float abs(Float x) { return (fabsf(x)); } #endif // jmc ......... 7/19 //inline Double abs(Double x) //{ return (fabs(x)); } #endif #ifdef VL_HAS_ABSF inline Float len(Float x) { return (fabsf(x)); } #endif inline Double len(Double x) { return (fabs(x)); } inline Float sqrlen(Float r) { return(sqr(r)); } inline Double sqrlen(Double r) { return(sqr(r)); } inline Float mix(Float a, Float b, Float s) { return((1.0f - s) * a + s * b); } inline Double mix(Double a, Double b, Double s) { return((1.0 - s) * a + s * b); } inline Double sign(Double d) { if (d < 0) return(-1.0); else return(1.0); } // useful routines inline Bool IsPowerOfTwo(Int a) { return((a & -a) == a); }; inline Void SetReal(Float &a, Double b) { a = Float(b); } inline Void SetReal(Double &a, Double b) { a = b; } #endif