xref: /netbsd-src/lib/libm/src/w_exp.c (revision 1ca5c1b28139779176bd5c13ad7c5f25c0bcd5f8)
1 /* @(#)w_exp.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 #include <sys/cdefs.h>
14 #if defined(LIBM_SCCS) && !defined(lint)
15 __RCSID("$NetBSD: w_exp.c,v 1.8 1999/07/02 15:37:44 simonb Exp $");
16 #endif
17 
18 /*
19  * wrapper exp(x)
20  */
21 
22 #include "math.h"
23 #include "math_private.h"
24 
25 #ifdef __STDC__
26 static const double
27 #else
28 static double
29 #endif
30 o_threshold=  7.09782712893383973096e+02,  /* 0x40862E42, 0xFEFA39EF */
31 u_threshold= -7.45133219101941108420e+02;  /* 0xc0874910, 0xD52D3051 */
32 
33 #ifdef __STDC__
34 	double exp(double x)		/* wrapper exp */
35 #else
36 	double exp(x)			/* wrapper exp */
37 	double x;
38 #endif
39 {
40 #ifdef _IEEE_LIBM
41 	return __ieee754_exp(x);
42 #else
43 	double z;
44 	z = __ieee754_exp(x);
45 	if(_LIB_VERSION == _IEEE_) return z;
46 	if(finite(x)) {
47 	    if(x>o_threshold)
48 	        return __kernel_standard(x,x,6); /* exp overflow */
49 	    else if(x<u_threshold)
50 	        return __kernel_standard(x,x,7); /* exp underflow */
51 	}
52 	return z;
53 #endif
54 }
55