(root)/
glibc-2.38/
sysdeps/
ieee754/
dbl-64/
s_isnan.c
       1  /* @(#)s_isnan.c 5.1 93/09/24 */
       2  /*
       3   * ====================================================
       4   * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
       5   *
       6   * Developed at SunPro, a Sun Microsystems, Inc. business.
       7   * Permission to use, copy, modify, and distribute this
       8   * software is freely granted, provided that this notice
       9   * is preserved.
      10   * ====================================================
      11   */
      12  
      13  /*
      14   * isnan(x) returns 1 is x is nan, else 0;
      15   * no branching!
      16   */
      17  
      18  #include <math.h>
      19  #include <math_private.h>
      20  #include <ldbl-classify-compat.h>
      21  #include <shlib-compat.h>
      22  #include <stdint.h>
      23  
      24  int
      25  __isnan (double x)
      26  {
      27    int64_t hx;
      28    EXTRACT_WORDS64 (hx, x);
      29    hx &= UINT64_C (0x7fffffffffffffff);
      30    hx = UINT64_C (0x7ff0000000000000) - hx;
      31    return (int)(((uint64_t)hx)>>63);
      32  }
      33  hidden_def (__isnan)
      34  weak_alias (__isnan, isnan)
      35  #ifdef NO_LONG_DOUBLE
      36  # if LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
      37  compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0);
      38  # endif
      39  weak_alias (__isnan, isnanl)
      40  #endif