xref: /titanic_51/usr/src/lib/libast/common/port/astmath.c (revision 80e2ca8596e3435bc3b76f3c597833ea0a87f85e)
1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                  Common Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *            http://www.opensource.org/licenses/cpl1.0.txt             *
11 *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *                 Glenn Fowler <gsf@research.att.com>                  *
18 *                  David Korn <dgk@research.att.com>                   *
19 *                   Phong Vo <kpv@research.att.com>                    *
20 *                                                                      *
21 ***********************************************************************/
22 /*
23  * used to test if -last requires -lm
24  *
25  *	arch		-last			-lm
26  *	----		-----			---
27  *	linux.sparc	sfdlen,sfputd		frexp,ldexp
28  */
29 
30 #if N >= 8
31 #define _ISOC99_SOURCE	1
32 #endif
33 
34 #include <math.h>
35 
36 int
37 main()
38 {
39 #if N & 1
40 	long double	value = 0;
41 #else
42 	double		value = 0;
43 #endif
44 #if N < 5
45 	int		exp = 0;
46 #endif
47 
48 #if N == 1
49 	return ldexpl(value, exp) != 0;
50 #endif
51 #if N == 2
52 	return ldexp(value, exp) != 0;
53 #endif
54 #if N == 3
55 	return frexpl(value, &exp) != 0;
56 #endif
57 #if N == 4
58 	return frexp(value, &exp) != 0;
59 #endif
60 #if N == 5
61 	return isnan(value);
62 #endif
63 #if N == 6
64 	return isnan(value);
65 #endif
66 #if N == 7
67 	return copysign(1.0, value) < 0;
68 #endif
69 #if N == 8
70 	return signbit(value);
71 #endif
72 }
73