diff options
Diffstat (limited to 'externals/vanilla/e_sqrt.c')
-rw-r--r-- | externals/vanilla/e_sqrt.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/externals/vanilla/e_sqrt.c b/externals/vanilla/e_sqrt.c new file mode 100644 index 00000000..eb011a4a --- /dev/null +++ b/externals/vanilla/e_sqrt.c @@ -0,0 +1,32 @@ +/* Copyright (c) 1997-2001 Miller Puckette and others. +* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ + +/* sqrt-related functions from pd-vanilla's d_math.c */ + +#include "e_sqrt.h" + + /* these are used in externs like "bonk" */ + +t_float q8_rsqrt(t_float f) +{ + long l = *(long *)(&f); + if (f < 0) return (0); + else return (rsqrt_exptab[(l >> 23) & 0xff] * + rsqrt_mantissatab[(l >> 13) & 0x3ff]); +} + +t_float q8_sqrt(t_float f) +{ + long l = *(long *)(&f); + if (f < 0) return (0); + else return (f * rsqrt_exptab[(l >> 23) & 0xff] * + rsqrt_mantissatab[(l >> 13) & 0x3ff]); +} + + /* the old names are OK unless we're in IRIX N32 */ + +#ifndef N32 +t_float qsqrt(t_float f) {return (q8_sqrt(f)); } +t_float qrsqrt(t_float f) {return (q8_rsqrt(f)); } +#endif |