Annotation of researchv9/libc/math/fmod.c, revision 1.1

1.1     ! root        1: /* floating-point mod function without infinity or NaN checking */
        !             2: #include <math.h>
        !             3: #include <errno.h>
        !             4: 
        !             5: extern int errno;
        !             6: 
        !             7: double
        !             8: fmod (x, y)
        !             9:        double x, y;
        !            10: {
        !            11:        int sign = 0, yexp;
        !            12:        double r, yfr, ldexp(), frexp();
        !            13: 
        !            14:        if (y == 0)
        !            15:                return x;
        !            16: 
        !            17:        if (y < 0)
        !            18:                y = -y;
        !            19: 
        !            20:        yfr = frexp (y, &yexp);
        !            21: 
        !            22:        if (x < 0) {
        !            23:                sign = 1;
        !            24:                r = -x;
        !            25:        } else
        !            26:                r = x;
        !            27: 
        !            28:        while (r >= y) {
        !            29:                int rexp;
        !            30:                double rfr = frexp (r, &rexp);
        !            31:                r -= ldexp (y, rexp - yexp - (rfr < yfr));
        !            32:        }
        !            33: 
        !            34:        if (sign)
        !            35:                r = -r;
        !            36:        return r;
        !            37: }

unix.superglobalmegacorp.com

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