Back to index

glibc  2.9
Functions | Variables
e_remainderl.c File Reference
#include "math.h"
#include "math_private.h"

Go to the source code of this file.

Functions

long double __ieee754_remainderl (long double x, long double p)

Variables

static long double zero = 0.0L

Function Documentation

long double __ieee754_remainderl ( long double  x,
long double  p 
)

Definition at line 37 of file e_remainderl.c.

{
       int64_t hx,hp;
       u_int64_t sx,lx,lp;
       long double p_half;

       GET_LDOUBLE_WORDS64(hx,lx,x);
       GET_LDOUBLE_WORDS64(hp,lp,p);
       sx = hx&0x8000000000000000ULL;
       hp &= 0x7fffffffffffffffLL;
       hx &= 0x7fffffffffffffffLL;

    /* purge off exception values */
       if((hp|lp)==0) return (x*p)/(x*p);        /* p = 0 */
       if((hx>=0x7fff000000000000LL)||                  /* x not finite */
         ((hp>=0x7fff000000000000LL)&&                  /* p is NaN */
         (((hp-0x7fff000000000000LL)|lp)!=0)))
           return (x*p)/(x*p);


       if (hp<=0x7ffdffffffffffffLL) x = __ieee754_fmodl(x,p+p);      /* now x < 2p */
       if (((hx-hp)|(lx-lp))==0) return zero*x;
       x  = fabsl(x);
       p  = fabsl(p);
       if (hp<0x0002000000000000LL) {
           if(x+x>p) {
              x-=p;
              if(x+x>=p) x -= p;
           }
       } else {
           p_half = 0.5L*p;
           if(x>p_half) {
              x-=p;
              if(x>=p_half) x -= p;
           }
       }
       GET_LDOUBLE_MSW64(hx,x);
       SET_LDOUBLE_MSW64(x,hx^sx);
       return x;
}

Here is the call graph for this function:


Variable Documentation

long double zero = 0.0L [static]

Definition at line 30 of file e_remainderl.c.