xref: /netbsd-src/lib/libm/src/s_finite.c (revision d9158b13b5dfe46201430699a3f7a235ecf28df3)
1 /* @(#)s_finite.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 #ifndef lint
14 static char rcsid[] = "$Id: s_finite.c,v 1.4 1994/03/03 17:04:34 jtc Exp $";
15 #endif
16 
17 /*
18  * finite(x) returns 1 is x is finite, else 0;
19  * no branching!
20  */
21 
22 #include <math.h>
23 #include <machine/endian.h>
24 
25 #if BYTE_ORDER == LITTLE_ENDIAN
26 #define n0	1
27 #else
28 #define n0	0
29 #endif
30 
31 #ifdef __STDC__
32 	int finite(double x)
33 #else
34 	int finite(x)
35 	double x;
36 #endif
37 {
38 	int hx;
39 	hx = *(n0+(int*)&x);
40 	return  (unsigned)((hx&0x7fffffff)-0x7ff00000)>>31;
41 }
42