Back to index

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

Go to the source code of this file.

Functions

float __modff (float x, float *iptr)

Variables

static float one = 1.0

Function Documentation

float __modff ( float  x,
float*  iptr 
)

Definition at line 32 of file s_modff.c.

{
       int32_t i0,j0;
       u_int32_t i;
       GET_FLOAT_WORD(i0,x);
       j0 = ((i0>>23)&0xff)-0x7f;  /* exponent of x */
       if(j0<23) {                 /* integer part in x */
           if(j0<0) {                     /* |x|<1 */
               SET_FLOAT_WORD(*iptr,i0&0x80000000);     /* *iptr = +-0 */
              return x;
           } else {
              i = (0x007fffff)>>j0;
              if((i0&i)==0) {                    /* x is integral */
                  u_int32_t ix;
                  *iptr = x;
                  GET_FLOAT_WORD(ix,x);
                  SET_FLOAT_WORD(x,ix&0x80000000);      /* return +-0 */
                  return x;
              } else {
                  SET_FLOAT_WORD(*iptr,i0&(~i));
                  return x - *iptr;
              }
           }
       } else {                    /* no fraction part */
           *iptr = x*one;
           /* We must handle NaNs separately.  */
           if (j0 == 0x80 && (i0 & 0x7fffff))
             return x*one;
           SET_FLOAT_WORD(x,i0&0x80000000);      /* return +-0 */
           return x;
       }
}

Here is the call graph for this function:


Variable Documentation

float one = 1.0 [static]

Definition at line 26 of file s_modff.c.