Back to index

glibc  2.9
Functions
s_llrintl.c File Reference
#include <math.h>
#include "math_private.h"
#include "mathimpl.h"

Go to the source code of this file.

Functions

long long int __llrintl (long double x)

Function Documentation

long long int __llrintl ( long double  x)

Definition at line 27 of file s_llrintl.c.

{
  int32_t e, s;
  u_int32_t h, l;
  long long int result;

  x = __m81_u(__rintl) (x);

  GET_LDOUBLE_WORDS (e, h, l, x);

  s = e;
  e = (e & 0x7fff) - 0x3fff;
  if (e < 0)
    return 0;

  if (e < 63)
    {
      if (e > 31)
       {
         l >>= 63 - e;
         l |= h << (e - 31);
         h >>= 63 - e;
         result = ((long long int) h << 32) | l;
       }
      else
       result = h >> (31 - e);
      if (s & 0x8000)
       result = -result;
    }
  else
    /* The number is too large or not finite.  The standard leaves it
       undefined what to return when the number is too large to fit in a
       `long long int'.  */
    result = -1LL;

  return result;
}

Here is the call graph for this function: