xref: /inferno-os/libmath/fdlibm/s_isnan.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /* derived from /netlib/fdlibm */
2*37da2899SCharles.Forsyth 
3*37da2899SCharles.Forsyth /* @(#)s_isnan.c 1.3 95/01/18 */
4*37da2899SCharles.Forsyth /*
5*37da2899SCharles.Forsyth  * ====================================================
6*37da2899SCharles.Forsyth  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
7*37da2899SCharles.Forsyth  *
8*37da2899SCharles.Forsyth  * Developed at SunSoft, a Sun Microsystems, Inc. business.
9*37da2899SCharles.Forsyth  * Permission to use, copy, modify, and distribute this
10*37da2899SCharles.Forsyth  * software is freely granted, provided that this notice
11*37da2899SCharles.Forsyth  * is preserved.
12*37da2899SCharles.Forsyth  * ====================================================
13*37da2899SCharles.Forsyth  */
14*37da2899SCharles.Forsyth 
15*37da2899SCharles.Forsyth /*
16*37da2899SCharles.Forsyth  * isnan(x) returns 1 is x is nan, else 0;
17*37da2899SCharles.Forsyth  * no branching!
18*37da2899SCharles.Forsyth  */
19*37da2899SCharles.Forsyth 
20*37da2899SCharles.Forsyth #include "fdlibm.h"
21*37da2899SCharles.Forsyth 
isnan(double x)22*37da2899SCharles.Forsyth 	int isnan(double x)
23*37da2899SCharles.Forsyth {
24*37da2899SCharles.Forsyth 	int hx,lx;
25*37da2899SCharles.Forsyth 	hx = (__HI(x)&0x7fffffff);
26*37da2899SCharles.Forsyth 	lx = __LO(x);
27*37da2899SCharles.Forsyth 	hx |= (unsigned)(lx|(-lx))>>31;
28*37da2899SCharles.Forsyth 	hx = 0x7ff00000 - hx;
29*37da2899SCharles.Forsyth 	return ((unsigned)(hx))>>31;
30*37da2899SCharles.Forsyth }
31