Annotation of coherent/b/lib/libm/two.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * libm/two.c
                      3:  * Evaluate 2 to the power x.
                      4:  * (Hart 1067, 18.08)
                      5:  */
                      6: 
                      7: #include <math.h>
                      8: 
                      9: #if    EMU87
                     10: #include "emumath.h"
                     11: #endif
                     12: 
                     13: static readonly double twontab[] ={
                     14:        0.1513906799054338915894328e+04,
                     15:        0.2020206565128692722788600e+02,
                     16:        0.2309334775375023362400000e-01
                     17: };
                     18: static readonly double twomtab[] ={
                     19:        0.4368211662727558498496814e+04,
                     20:        0.2331842114274816237902950e+03,
                     21:        0.1000000000000000000000000e+01
                     22: };
                     23: 
                     24: double
                     25: _two(x) double x;
                     26: {
                     27:        double p, q, r, e;
                     28:        register int s;
                     29: 
                     30:        if (x > L2HUGE_VAL) {
                     31:                errno = ERANGE;
                     32:                return HUGE_VAL;
                     33:        }
                     34:        s = 0;
                     35:        if ((x = modf(x, &e)) < 0.0) {
                     36:                x += 1.0;
                     37:                e -= 1.0;
                     38:        }
                     39:        if (x > 0.5) {
                     40:                s = 1;
                     41:                x -= 0.5;
                     42:        }
                     43:        r = x*x;
                     44:        p = x*_pol(r, twontab, 3);
                     45:        q = _pol(r, twomtab, 3);
                     46:        r = (q+p)/(q-p);
                     47:        if (s)
                     48:                r *= SQRT2;
                     49:        return ldexp(r, (int) e);
                     50: }
                     51: 
                     52: /* end of libm/two.c */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.