xref: /openbsd-src/regress/lib/libm/cephes/const.c (revision 567a75322e623a2ab847d629ba14a2f8112ff3f3)
1*567a7532Smartynas /*	$OpenBSD: const.c,v 1.1 2011/05/30 20:23:35 martynas Exp $	*/
2*567a7532Smartynas 
3*567a7532Smartynas /*
4*567a7532Smartynas  * Copyright (c) 2008 Stephen L. Moshier <steve@moshier.net>
5*567a7532Smartynas  *
6*567a7532Smartynas  * Permission to use, copy, modify, and distribute this software for any
7*567a7532Smartynas  * purpose with or without fee is hereby granted, provided that the above
8*567a7532Smartynas  * copyright notice and this permission notice appear in all copies.
9*567a7532Smartynas  *
10*567a7532Smartynas  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11*567a7532Smartynas  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12*567a7532Smartynas  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13*567a7532Smartynas  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14*567a7532Smartynas  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15*567a7532Smartynas  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16*567a7532Smartynas  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*567a7532Smartynas  */
18*567a7532Smartynas 
19*567a7532Smartynas /*							const.c
20*567a7532Smartynas  *
21*567a7532Smartynas  *	Globally declared constants
22*567a7532Smartynas  *
23*567a7532Smartynas  *
24*567a7532Smartynas  *
25*567a7532Smartynas  * SYNOPSIS:
26*567a7532Smartynas  *
27*567a7532Smartynas  * extern double nameofconstant;
28*567a7532Smartynas  *
29*567a7532Smartynas  *
30*567a7532Smartynas  *
31*567a7532Smartynas  *
32*567a7532Smartynas  * DESCRIPTION:
33*567a7532Smartynas  *
34*567a7532Smartynas  * This file contains a number of mathematical constants and
35*567a7532Smartynas  * also some needed size parameters of the computer arithmetic.
36*567a7532Smartynas  * The values are supplied as arrays of hexadecimal integers
37*567a7532Smartynas  * for IEEE arithmetic; arrays of octal constants for DEC
38*567a7532Smartynas  * arithmetic; and in a normal decimal scientific notation for
39*567a7532Smartynas  * other machines.  The particular notation used is determined
40*567a7532Smartynas  * by a symbol (DEC, IBMPC, or UNK) defined in the include file
41*567a7532Smartynas  * mconf.h.
42*567a7532Smartynas  *
43*567a7532Smartynas  * The default size parameters are as follows.
44*567a7532Smartynas  *
45*567a7532Smartynas  * For DEC and UNK modes:
46*567a7532Smartynas  * MACHEP =  1.38777878078144567553E-17       2**-56
47*567a7532Smartynas  * MAXLOG =  8.8029691931113054295988E1       log(2**127)
48*567a7532Smartynas  * MINLOG = -8.872283911167299960540E1        log(2**-128)
49*567a7532Smartynas  * MAXNUM =  1.701411834604692317316873e38    2**127
50*567a7532Smartynas  *
51*567a7532Smartynas  * For IEEE arithmetic (IBMPC):
52*567a7532Smartynas  * MACHEP =  1.11022302462515654042E-16       2**-53
53*567a7532Smartynas  * MAXLOG =  7.09782712893383996843E2         log(2**1024)
54*567a7532Smartynas  * MINLOG = -7.08396418532264106224E2         log(2**-1022)
55*567a7532Smartynas  * MAXNUM =  1.7976931348623158E308           2**1024
56*567a7532Smartynas  *
57*567a7532Smartynas  * The global symbols for mathematical constants are
58*567a7532Smartynas  * PI     =  3.14159265358979323846           pi
59*567a7532Smartynas  * PIO2   =  1.57079632679489661923           pi/2
60*567a7532Smartynas  * PIO4   =  7.85398163397448309616E-1        pi/4
61*567a7532Smartynas  * SQRT2  =  1.41421356237309504880           sqrt(2)
62*567a7532Smartynas  * SQRTH  =  7.07106781186547524401E-1        sqrt(2)/2
63*567a7532Smartynas  * LOG2E  =  1.4426950408889634073599         1/log(2)
64*567a7532Smartynas  * SQ2OPI =  7.9788456080286535587989E-1      sqrt( 2/pi )
65*567a7532Smartynas  * LOGE2  =  6.93147180559945309417E-1        log(2)
66*567a7532Smartynas  * LOGSQ2 =  3.46573590279972654709E-1        log(2)/2
67*567a7532Smartynas  * THPIO4 =  2.35619449019234492885           3*pi/4
68*567a7532Smartynas  * TWOOPI =  6.36619772367581343075535E-1     2/pi
69*567a7532Smartynas  *
70*567a7532Smartynas  * These lists are subject to change.
71*567a7532Smartynas  */
72*567a7532Smartynas 
73*567a7532Smartynas #include "mconf.h"
74*567a7532Smartynas 
75*567a7532Smartynas #ifdef UNK
76*567a7532Smartynas #if 1
77*567a7532Smartynas double MACHEP =  1.11022302462515654042E-16;   /* 2**-53 */
78*567a7532Smartynas #else
79*567a7532Smartynas double MACHEP =  1.38777878078144567553E-17;   /* 2**-56 */
80*567a7532Smartynas #endif
81*567a7532Smartynas double UFLOWTHRESH =  2.22507385850720138309E-308; /* 2**-1022 */
82*567a7532Smartynas #ifdef DENORMAL
83*567a7532Smartynas double MAXLOG =  7.09782712893383996732E2;     /* log(MAXNUM) */
84*567a7532Smartynas /* double MINLOG = -7.44440071921381262314E2; */     /* log(2**-1074) */
85*567a7532Smartynas double MINLOG = -7.451332191019412076235E2;     /* log(2**-1075) */
86*567a7532Smartynas #else
87*567a7532Smartynas double MAXLOG =  7.08396418532264106224E2;     /* log 2**1022 */
88*567a7532Smartynas double MINLOG = -7.08396418532264106224E2;     /* log 2**-1022 */
89*567a7532Smartynas #endif
90*567a7532Smartynas double MAXNUM =  1.79769313486231570815E308;    /* 2**1024*(1-MACHEP) */
91*567a7532Smartynas double PI     =  3.14159265358979323846;       /* pi */
92*567a7532Smartynas double PIO2   =  1.57079632679489661923;       /* pi/2 */
93*567a7532Smartynas double PIO4   =  7.85398163397448309616E-1;    /* pi/4 */
94*567a7532Smartynas double SQRT2  =  1.41421356237309504880;       /* sqrt(2) */
95*567a7532Smartynas double SQRTH  =  7.07106781186547524401E-1;    /* sqrt(2)/2 */
96*567a7532Smartynas double LOG2E  =  1.4426950408889634073599;     /* 1/log(2) */
97*567a7532Smartynas double SQ2OPI =  7.9788456080286535587989E-1;  /* sqrt( 2/pi ) */
98*567a7532Smartynas double LOGE2  =  6.93147180559945309417E-1;    /* log(2) */
99*567a7532Smartynas double LOGSQ2 =  3.46573590279972654709E-1;    /* log(2)/2 */
100*567a7532Smartynas double THPIO4 =  2.35619449019234492885;       /* 3*pi/4 */
101*567a7532Smartynas double TWOOPI =  6.36619772367581343075535E-1; /* 2/pi */
102*567a7532Smartynas #ifdef INFINITIES
103*567a7532Smartynas double INFINITY = 1.0/0.0;  /* 99e999; */
104*567a7532Smartynas #else
105*567a7532Smartynas double INFINITY =  1.79769313486231570815E308;    /* 2**1024*(1-MACHEP) */
106*567a7532Smartynas #endif
107*567a7532Smartynas #ifdef NANS
108*567a7532Smartynas double NAN = 1.0/0.0 - 1.0/0.0;
109*567a7532Smartynas #else
110*567a7532Smartynas double NAN = 0.0;
111*567a7532Smartynas #endif
112*567a7532Smartynas #ifdef MINUSZERO
113*567a7532Smartynas double NEGZERO = -0.0;
114*567a7532Smartynas #else
115*567a7532Smartynas double NEGZERO = 0.0;
116*567a7532Smartynas #endif
117*567a7532Smartynas #endif
118*567a7532Smartynas 
119*567a7532Smartynas #ifdef IBMPC
120*567a7532Smartynas 			/* 2**-53 =  1.11022302462515654042E-16 */
121*567a7532Smartynas unsigned short MACHEP[4] = {0x0000,0x0000,0x0000,0x3ca0};
122*567a7532Smartynas unsigned short UFLOWTHRESH[4] = {0x0000,0x0000,0x0000,0x0010};
123*567a7532Smartynas #ifdef DENORMAL
124*567a7532Smartynas 			/* log(MAXNUM) =  7.09782712893383996732224E2 */
125*567a7532Smartynas unsigned short MAXLOG[4] = {0x39ef,0xfefa,0x2e42,0x4086};
126*567a7532Smartynas 			/* log(2**-1074) = - -7.44440071921381262314E2 */
127*567a7532Smartynas /*unsigned short MINLOG[4] = {0x71c3,0x446d,0x4385,0xc087};*/
128*567a7532Smartynas unsigned short MINLOG[4] = {0x3052,0xd52d,0x4910,0xc087};
129*567a7532Smartynas #else
130*567a7532Smartynas 			/* log(2**1022) =   7.08396418532264106224E2 */
131*567a7532Smartynas unsigned short MAXLOG[4] = {0xbcd2,0xdd7a,0x232b,0x4086};
132*567a7532Smartynas 			/* log(2**-1022) = - 7.08396418532264106224E2 */
133*567a7532Smartynas unsigned short MINLOG[4] = {0xbcd2,0xdd7a,0x232b,0xc086};
134*567a7532Smartynas #endif
135*567a7532Smartynas 			/* 2**1024*(1-MACHEP) =  1.7976931348623158E308 */
136*567a7532Smartynas unsigned short MAXNUM[4] = {0xffff,0xffff,0xffff,0x7fef};
137*567a7532Smartynas unsigned short PI[4]     = {0x2d18,0x5444,0x21fb,0x4009};
138*567a7532Smartynas unsigned short PIO2[4]   = {0x2d18,0x5444,0x21fb,0x3ff9};
139*567a7532Smartynas unsigned short PIO4[4]   = {0x2d18,0x5444,0x21fb,0x3fe9};
140*567a7532Smartynas unsigned short SQRT2[4]  = {0x3bcd,0x667f,0xa09e,0x3ff6};
141*567a7532Smartynas unsigned short SQRTH[4]  = {0x3bcd,0x667f,0xa09e,0x3fe6};
142*567a7532Smartynas unsigned short LOG2E[4]  = {0x82fe,0x652b,0x1547,0x3ff7};
143*567a7532Smartynas unsigned short SQ2OPI[4] = {0x3651,0x33d4,0x8845,0x3fe9};
144*567a7532Smartynas unsigned short LOGE2[4]  = {0x39ef,0xfefa,0x2e42,0x3fe6};
145*567a7532Smartynas unsigned short LOGSQ2[4] = {0x39ef,0xfefa,0x2e42,0x3fd6};
146*567a7532Smartynas unsigned short THPIO4[4] = {0x21d2,0x7f33,0xd97c,0x4002};
147*567a7532Smartynas unsigned short TWOOPI[4] = {0xc883,0x6dc9,0x5f30,0x3fe4};
148*567a7532Smartynas #ifdef INFINITIES
149*567a7532Smartynas unsigned short INFINITY[4] = {0x0000,0x0000,0x0000,0x7ff0};
150*567a7532Smartynas #else
151*567a7532Smartynas unsigned short INFINITY[4] = {0xffff,0xffff,0xffff,0x7fef};
152*567a7532Smartynas #endif
153*567a7532Smartynas #ifdef NANS
154*567a7532Smartynas unsigned short NAN[4] = {0x0000,0x0000,0x0000,0x7ffc};
155*567a7532Smartynas #else
156*567a7532Smartynas unsigned short NAN[4] = {0x0000,0x0000,0x0000,0x0000};
157*567a7532Smartynas #endif
158*567a7532Smartynas #ifdef MINUSZERO
159*567a7532Smartynas unsigned short NEGZERO[4] = {0x0000,0x0000,0x0000,0x8000};
160*567a7532Smartynas #else
161*567a7532Smartynas unsigned short NEGZERO[4] = {0x0000,0x0000,0x0000,0x0000};
162*567a7532Smartynas #endif
163*567a7532Smartynas #endif
164*567a7532Smartynas 
165*567a7532Smartynas #ifdef MIEEE
166*567a7532Smartynas 			/* 2**-53 =  1.11022302462515654042E-16 */
167*567a7532Smartynas unsigned short MACHEP[4] = {0x3ca0,0x0000,0x0000,0x0000};
168*567a7532Smartynas unsigned short UFLOWTHRESH[4] = {0x0010,0x0000,0x0000,0x0000};
169*567a7532Smartynas #ifdef DENORMAL
170*567a7532Smartynas 			/* log(2**1024) =   7.09782712893383996843E2 */
171*567a7532Smartynas unsigned short MAXLOG[4] = {0x4086,0x2e42,0xfefa,0x39ef};
172*567a7532Smartynas 			/* log(2**-1074) = - -7.44440071921381262314E2 */
173*567a7532Smartynas /* unsigned short MINLOG[4] = {0xc087,0x4385,0x446d,0x71c3}; */
174*567a7532Smartynas unsigned short MINLOG[4] = {0xc087,0x4910,0xd52d,0x3052};
175*567a7532Smartynas #else
176*567a7532Smartynas 			/* log(2**1022) =  7.08396418532264106224E2 */
177*567a7532Smartynas unsigned short MAXLOG[4] = {0x4086,0x232b,0xdd7a,0xbcd2};
178*567a7532Smartynas 			/* log(2**-1022) = - 7.08396418532264106224E2 */
179*567a7532Smartynas unsigned short MINLOG[4] = {0xc086,0x232b,0xdd7a,0xbcd2};
180*567a7532Smartynas #endif
181*567a7532Smartynas 			/* 2**1024*(1-MACHEP) =  1.7976931348623158E308 */
182*567a7532Smartynas unsigned short MAXNUM[4] = {0x7fef,0xffff,0xffff,0xffff};
183*567a7532Smartynas unsigned short PI[4]     = {0x4009,0x21fb,0x5444,0x2d18};
184*567a7532Smartynas unsigned short PIO2[4]   = {0x3ff9,0x21fb,0x5444,0x2d18};
185*567a7532Smartynas unsigned short PIO4[4]   = {0x3fe9,0x21fb,0x5444,0x2d18};
186*567a7532Smartynas unsigned short SQRT2[4]  = {0x3ff6,0xa09e,0x667f,0x3bcd};
187*567a7532Smartynas unsigned short SQRTH[4]  = {0x3fe6,0xa09e,0x667f,0x3bcd};
188*567a7532Smartynas unsigned short LOG2E[4]  = {0x3ff7,0x1547,0x652b,0x82fe};
189*567a7532Smartynas unsigned short SQ2OPI[4] = {0x3fe9,0x8845,0x33d4,0x3651};
190*567a7532Smartynas unsigned short LOGE2[4]  = {0x3fe6,0x2e42,0xfefa,0x39ef};
191*567a7532Smartynas unsigned short LOGSQ2[4] = {0x3fd6,0x2e42,0xfefa,0x39ef};
192*567a7532Smartynas unsigned short THPIO4[4] = {0x4002,0xd97c,0x7f33,0x21d2};
193*567a7532Smartynas unsigned short TWOOPI[4] = {0x3fe4,0x5f30,0x6dc9,0xc883};
194*567a7532Smartynas #ifdef INFINITIES
195*567a7532Smartynas unsigned short INFINITY[4] = {0x7ff0,0x0000,0x0000,0x0000};
196*567a7532Smartynas #else
197*567a7532Smartynas unsigned short INFINITY[4] = {0x7fef,0xffff,0xffff,0xffff};
198*567a7532Smartynas #endif
199*567a7532Smartynas #ifdef NANS
200*567a7532Smartynas unsigned short NAN[4] = {0x7ff8,0x0000,0x0000,0x0000};
201*567a7532Smartynas #else
202*567a7532Smartynas unsigned short NAN[4] = {0x0000,0x0000,0x0000,0x0000};
203*567a7532Smartynas #endif
204*567a7532Smartynas #ifdef MINUSZERO
205*567a7532Smartynas unsigned short NEGZERO[4] = {0x8000,0x0000,0x0000,0x0000};
206*567a7532Smartynas #else
207*567a7532Smartynas unsigned short NEGZERO[4] = {0x0000,0x0000,0x0000,0x0000};
208*567a7532Smartynas #endif
209*567a7532Smartynas #endif
210*567a7532Smartynas 
211*567a7532Smartynas #ifdef DEC
212*567a7532Smartynas 			/* 2**-56 =  1.38777878078144567553E-17 */
213*567a7532Smartynas unsigned short MACHEP[4] = {0022200,0000000,0000000,0000000};
214*567a7532Smartynas unsigned short UFLOWTHRESH[4] = {0x0080,0x0000,0x0000,0x0000};
215*567a7532Smartynas 			/* log 2**127 = 88.029691931113054295988 */
216*567a7532Smartynas unsigned short MAXLOG[4] = {041660,007463,0143742,025733,};
217*567a7532Smartynas 			/* log 2**-128 = -88.72283911167299960540 */
218*567a7532Smartynas unsigned short MINLOG[4] = {0141661,071027,0173721,0147572,};
219*567a7532Smartynas 			/* 2**127 = 1.701411834604692317316873e38 */
220*567a7532Smartynas unsigned short MAXNUM[4] = {077777,0177777,0177777,0177777,};
221*567a7532Smartynas unsigned short PI[4]     = {040511,007732,0121041,064302,};
222*567a7532Smartynas unsigned short PIO2[4]   = {040311,007732,0121041,064302,};
223*567a7532Smartynas unsigned short PIO4[4]   = {040111,007732,0121041,064302,};
224*567a7532Smartynas unsigned short SQRT2[4]  = {040265,002363,031771,0157145,};
225*567a7532Smartynas unsigned short SQRTH[4]  = {040065,002363,031771,0157144,};
226*567a7532Smartynas unsigned short LOG2E[4]  = {040270,0125073,024534,013761,};
227*567a7532Smartynas unsigned short SQ2OPI[4] = {040114,041051,0117241,0131204,};
228*567a7532Smartynas unsigned short LOGE2[4]  = {040061,071027,0173721,0147572,};
229*567a7532Smartynas unsigned short LOGSQ2[4] = {037661,071027,0173721,0147572,};
230*567a7532Smartynas unsigned short THPIO4[4] = {040426,0145743,0174631,007222,};
231*567a7532Smartynas unsigned short TWOOPI[4] = {040042,0174603,067116,042025,};
232*567a7532Smartynas /* Approximate infinity by MAXNUM.  */
233*567a7532Smartynas unsigned short INFINITY[4] = {077777,0177777,0177777,0177777,};
234*567a7532Smartynas unsigned short NAN[4] = {0000000,0000000,0000000,0000000};
235*567a7532Smartynas #ifdef MINUSZERO
236*567a7532Smartynas unsigned short NEGZERO[4] = {0000000,0000000,0000000,0100000};
237*567a7532Smartynas #else
238*567a7532Smartynas unsigned short NEGZERO[4] = {0000000,0000000,0000000,0000000};
239*567a7532Smartynas #endif
240*567a7532Smartynas #endif
241*567a7532Smartynas 
242*567a7532Smartynas #ifndef UNK
243*567a7532Smartynas extern unsigned short MACHEP[];
244*567a7532Smartynas extern unsigned short UFLOWTHRESH[];
245*567a7532Smartynas extern unsigned short MAXLOG[];
246*567a7532Smartynas extern unsigned short UNDLOG[];
247*567a7532Smartynas extern unsigned short MINLOG[];
248*567a7532Smartynas extern unsigned short MAXNUM[];
249*567a7532Smartynas extern unsigned short PI[];
250*567a7532Smartynas extern unsigned short PIO2[];
251*567a7532Smartynas extern unsigned short PIO4[];
252*567a7532Smartynas extern unsigned short SQRT2[];
253*567a7532Smartynas extern unsigned short SQRTH[];
254*567a7532Smartynas extern unsigned short LOG2E[];
255*567a7532Smartynas extern unsigned short SQ2OPI[];
256*567a7532Smartynas extern unsigned short LOGE2[];
257*567a7532Smartynas extern unsigned short LOGSQ2[];
258*567a7532Smartynas extern unsigned short THPIO4[];
259*567a7532Smartynas extern unsigned short TWOOPI[];
260*567a7532Smartynas extern unsigned short INFINITY[];
261*567a7532Smartynas extern unsigned short NAN[];
262*567a7532Smartynas extern unsigned short NEGZERO[];
263*567a7532Smartynas #endif
264