diff options
| author | Robert Jonsson <spamatica@gmail.com> | 2011-03-07 19:01:11 +0000 | 
|---|---|---|
| committer | Robert Jonsson <spamatica@gmail.com> | 2011-03-07 19:01:11 +0000 | 
| commit | e40fc849149dd97c248866a4a1d026dda5e57b62 (patch) | |
| tree | b12b358f3b3a0608001d30403358f8443118ec5f /attic/muse_qt4_evolution/awl/fastlog.h | |
| parent | 1bd4f2e8d9745cabb667b043171cad22c8577768 (diff) | |
clean3
Diffstat (limited to 'attic/muse_qt4_evolution/awl/fastlog.h')
| -rw-r--r-- | attic/muse_qt4_evolution/awl/fastlog.h | 39 | 
1 files changed, 39 insertions, 0 deletions
| diff --git a/attic/muse_qt4_evolution/awl/fastlog.h b/attic/muse_qt4_evolution/awl/fastlog.h new file mode 100644 index 00000000..90a85342 --- /dev/null +++ b/attic/muse_qt4_evolution/awl/fastlog.h @@ -0,0 +1,39 @@ +/* Copyright unknown. Code by Laurent de Soras <laurent@ohmforce.com>. + */ + +#ifndef __FASTLOG_H__ +#define __FASTLOG_H__ + +#include <math.h> /* for HUGE_VAL */ + +static inline float fast_log2 (float val) +      { +	/* don't use reinterpret_cast<> because that prevents this +	   from being used by pure C code (for example, GnomeCanvasItems) +	*/ +      union {float f; int i;} t; +	t.f = val; +      int* const exp_ptr = &t.i; +	int x              = *exp_ptr; +	const int log_2    = ((x >> 23) & 255) - 128; +	x &= ~(255 << 23); +	x += 127 << 23; +	*exp_ptr = x; +	val = ((-1.0f/3) * t.f + 2) * t.f - 2.0f/3; +	return (val + log_2); +      } + +static inline float fast_log (const float val) +      { +      return (fast_log2 (val) * 0.69314718f); +      } + +static inline float fast_log10 (const float val) +      { +	return fast_log2(val) / 3.312500f; +      } + +static inline float minus_infinity() { return -HUGE_VAL; } + +#endif + | 
