blob: bb9929054f96953ad88651483e94617a3450db85 [file] [log] [blame]
Mark Dickinsonb93fff02009-09-28 18:54:55 +00001-- Testcases for functions in math.
2--
3-- Each line takes the form:
4--
5-- <testid> <function> <input_value> -> <output_value> <flags>
6--
7-- where:
8--
9-- <testid> is a short name identifying the test,
10--
11-- <function> is the function to be tested (exp, cos, asinh, ...),
12--
13-- <input_value> is a string representing a floating-point value
14--
15-- <output_value> is the expected (ideal) output value, again
16-- represented as a string.
17--
18-- <flags> is a list of the floating-point flags required by C99
19--
20-- The possible flags are:
21--
22-- divide-by-zero : raised when a finite input gives a
23-- mathematically infinite result.
24--
25-- overflow : raised when a finite input gives a finite result that
26-- is too large to fit in the usual range of an IEEE 754 double.
27--
28-- invalid : raised for invalid inputs (e.g., sqrt(-1))
29--
30-- ignore-sign : indicates that the sign of the result is
31-- unspecified; e.g., if the result is given as inf,
32-- then both -inf and inf should be accepted as correct.
33--
34-- Flags may appear in any order.
35--
36-- Lines beginning with '--' (like this one) start a comment, and are
37-- ignored. Blank lines, or lines containing only whitespace, are also
38-- ignored.
39
40-- Many of the values below were computed with the help of
41-- version 2.4 of the MPFR library for multiple-precision
42-- floating-point computations with correct rounding. All output
43-- values in this file are (modulo yet-to-be-discovered bugs)
44-- correctly rounded, provided that each input and output decimal
45-- floating-point value below is interpreted as a representation of
46-- the corresponding nearest IEEE 754 double-precision value. See the
47-- MPFR homepage at http://www.mpfr.org for more information about the
48-- MPFR project.
49
Mark Dickinson9be87bc2009-12-11 17:29:33 +000050---------------------------------------------------------
51-- lgamma: log of absolute value of the gamma function --
52---------------------------------------------------------
53
54-- special values
55lgam0000 lgamma 0.0 -> inf divide-by-zero
56lgam0001 lgamma -0.0 -> inf divide-by-zero
57lgam0002 lgamma inf -> inf
58lgam0003 lgamma -inf -> inf
59lgam0004 lgamma nan -> nan
60
61-- negative integers
62lgam0010 lgamma -1 -> inf divide-by-zero
63lgam0011 lgamma -2 -> inf divide-by-zero
64lgam0012 lgamma -1e16 -> inf divide-by-zero
65lgam0013 lgamma -1e300 -> inf divide-by-zero
66lgam0014 lgamma -1.79e308 -> inf divide-by-zero
67
68-- small positive integers give factorials
69lgam0020 lgamma 1 -> 0.0
70lgam0021 lgamma 2 -> 0.0
71lgam0022 lgamma 3 -> 0.69314718055994529
72lgam0023 lgamma 4 -> 1.791759469228055
73lgam0024 lgamma 5 -> 3.1780538303479458
74lgam0025 lgamma 6 -> 4.7874917427820458
75
76-- half integers
77lgam0030 lgamma 0.5 -> 0.57236494292470008
78lgam0031 lgamma 1.5 -> -0.12078223763524522
79lgam0032 lgamma 2.5 -> 0.28468287047291918
80lgam0033 lgamma 3.5 -> 1.2009736023470743
81lgam0034 lgamma -0.5 -> 1.2655121234846454
82lgam0035 lgamma -1.5 -> 0.86004701537648098
83lgam0036 lgamma -2.5 -> -0.056243716497674054
84lgam0037 lgamma -3.5 -> -1.309006684993042
85
86-- values near 0
87lgam0040 lgamma 0.1 -> 2.252712651734206
88lgam0041 lgamma 0.01 -> 4.5994798780420219
89lgam0042 lgamma 1e-8 -> 18.420680738180209
90lgam0043 lgamma 1e-16 -> 36.841361487904734
91lgam0044 lgamma 1e-30 -> 69.077552789821368
92lgam0045 lgamma 1e-160 -> 368.41361487904732
93lgam0046 lgamma 1e-308 -> 709.19620864216608
94lgam0047 lgamma 5.6e-309 -> 709.77602713741896
95lgam0048 lgamma 5.5e-309 -> 709.79404564292167
96lgam0049 lgamma 1e-309 -> 711.49879373516012
97lgam0050 lgamma 1e-323 -> 743.74692474082133
98lgam0051 lgamma 5e-324 -> 744.44007192138122
99lgam0060 lgamma -0.1 -> 2.3689613327287886
100lgam0061 lgamma -0.01 -> 4.6110249927528013
101lgam0062 lgamma -1e-8 -> 18.420680749724522
102lgam0063 lgamma -1e-16 -> 36.841361487904734
103lgam0064 lgamma -1e-30 -> 69.077552789821368
104lgam0065 lgamma -1e-160 -> 368.41361487904732
105lgam0066 lgamma -1e-308 -> 709.19620864216608
106lgam0067 lgamma -5.6e-309 -> 709.77602713741896
107lgam0068 lgamma -5.5e-309 -> 709.79404564292167
108lgam0069 lgamma -1e-309 -> 711.49879373516012
109lgam0070 lgamma -1e-323 -> 743.74692474082133
110lgam0071 lgamma -5e-324 -> 744.44007192138122
111
112-- values near negative integers
113lgam0080 lgamma -0.99999999999999989 -> 36.736800569677101
114lgam0081 lgamma -1.0000000000000002 -> 36.043653389117154
115lgam0082 lgamma -1.9999999999999998 -> 35.350506208557213
116lgam0083 lgamma -2.0000000000000004 -> 34.657359027997266
117lgam0084 lgamma -100.00000000000001 -> -331.85460524980607
118lgam0085 lgamma -99.999999999999986 -> -331.85460524980596
119
120-- large inputs
121lgam0100 lgamma 170 -> 701.43726380873704
122lgam0101 lgamma 171 -> 706.57306224578736
123lgam0102 lgamma 171.624 -> 709.78077443669895
124lgam0103 lgamma 171.625 -> 709.78591682948365
125lgam0104 lgamma 172 -> 711.71472580228999
126lgam0105 lgamma 2000 -> 13198.923448054265
127lgam0106 lgamma 2.55998332785163e305 -> 1.7976931348623099e+308
128lgam0107 lgamma 2.55998332785164e305 -> inf overflow
129lgam0108 lgamma 1.7e308 -> inf overflow
130
131-- inputs for which gamma(x) is tiny
132lgam0120 lgamma -100.5 -> -364.90096830942736
133lgam0121 lgamma -160.5 -> -656.88005261126432
134lgam0122 lgamma -170.5 -> -707.99843314507882
135lgam0123 lgamma -171.5 -> -713.14301641168481
136lgam0124 lgamma -176.5 -> -738.95247590846486
137lgam0125 lgamma -177.5 -> -744.13144651738037
138lgam0126 lgamma -178.5 -> -749.3160351186001
139
140lgam0130 lgamma -1000.5 -> -5914.4377011168517
141lgam0131 lgamma -30000.5 -> -279278.6629959144
142lgam0132 lgamma -4503599627370495.5 -> -1.5782258434492883e+17
143
144-- results close to 0: positive argument ...
145lgam0150 lgamma 0.99999999999999989 -> 6.4083812134800075e-17
146lgam0151 lgamma 1.0000000000000002 -> -1.2816762426960008e-16
147lgam0152 lgamma 1.9999999999999998 -> -9.3876980655431170e-17
148lgam0153 lgamma 2.0000000000000004 -> 1.8775396131086244e-16
149
150-- ... and negative argument
151lgam0160 lgamma -2.7476826467 -> -5.2477408147689136e-11
152lgam0161 lgamma -2.457024738 -> 3.3464637541912932e-10
153
154
Mark Dickinsonb93fff02009-09-28 18:54:55 +0000155---------------------------
156-- gamma: Gamma function --
157---------------------------
158
159-- special values
160gam0000 gamma 0.0 -> inf divide-by-zero
161gam0001 gamma -0.0 -> -inf divide-by-zero
162gam0002 gamma inf -> inf
163gam0003 gamma -inf -> nan invalid
164gam0004 gamma nan -> nan
165
166-- negative integers inputs are invalid
167gam0010 gamma -1 -> nan invalid
168gam0011 gamma -2 -> nan invalid
169gam0012 gamma -1e16 -> nan invalid
170gam0013 gamma -1e300 -> nan invalid
171
172-- small positive integers give factorials
173gam0020 gamma 1 -> 1
174gam0021 gamma 2 -> 1
175gam0022 gamma 3 -> 2
176gam0023 gamma 4 -> 6
177gam0024 gamma 5 -> 24
178gam0025 gamma 6 -> 120
179
180-- half integers
181gam0030 gamma 0.5 -> 1.7724538509055161
182gam0031 gamma 1.5 -> 0.88622692545275805
183gam0032 gamma 2.5 -> 1.3293403881791370
184gam0033 gamma 3.5 -> 3.3233509704478426
185gam0034 gamma -0.5 -> -3.5449077018110322
186gam0035 gamma -1.5 -> 2.3632718012073548
187gam0036 gamma -2.5 -> -0.94530872048294190
188gam0037 gamma -3.5 -> 0.27008820585226911
189
190-- values near 0
191gam0040 gamma 0.1 -> 9.5135076986687306
192gam0041 gamma 0.01 -> 99.432585119150602
193gam0042 gamma 1e-8 -> 99999999.422784343
194gam0043 gamma 1e-16 -> 10000000000000000
195gam0044 gamma 1e-30 -> 9.9999999999999988e+29
196gam0045 gamma 1e-160 -> 1.0000000000000000e+160
197gam0046 gamma 1e-308 -> 1.0000000000000000e+308
198gam0047 gamma 5.6e-309 -> 1.7857142857142848e+308
199gam0048 gamma 5.5e-309 -> inf overflow
200gam0049 gamma 1e-309 -> inf overflow
201gam0050 gamma 1e-323 -> inf overflow
202gam0051 gamma 5e-324 -> inf overflow
203gam0060 gamma -0.1 -> -10.686287021193193
204gam0061 gamma -0.01 -> -100.58719796441078
205gam0062 gamma -1e-8 -> -100000000.57721567
206gam0063 gamma -1e-16 -> -10000000000000000
207gam0064 gamma -1e-30 -> -9.9999999999999988e+29
208gam0065 gamma -1e-160 -> -1.0000000000000000e+160
209gam0066 gamma -1e-308 -> -1.0000000000000000e+308
210gam0067 gamma -5.6e-309 -> -1.7857142857142848e+308
211gam0068 gamma -5.5e-309 -> -inf overflow
212gam0069 gamma -1e-309 -> -inf overflow
213gam0070 gamma -1e-323 -> -inf overflow
214gam0071 gamma -5e-324 -> -inf overflow
215
216-- values near negative integers
217gam0080 gamma -0.99999999999999989 -> -9007199254740992.0
218gam0081 gamma -1.0000000000000002 -> 4503599627370495.5
219gam0082 gamma -1.9999999999999998 -> 2251799813685248.5
220gam0083 gamma -2.0000000000000004 -> -1125899906842623.5
221gam0084 gamma -100.00000000000001 -> -7.5400833348831090e-145
222gam0085 gamma -99.999999999999986 -> 7.5400833348840962e-145
223
224-- large inputs
225gam0100 gamma 170 -> 4.2690680090047051e+304
226gam0101 gamma 171 -> 7.2574156153079990e+306
227gam0102 gamma 171.624 -> 1.7942117599248104e+308
228gam0103 gamma 171.625 -> inf overflow
229gam0104 gamma 172 -> inf overflow
230gam0105 gamma 2000 -> inf overflow
231gam0106 gamma 1.7e308 -> inf overflow
232
233-- inputs for which gamma(x) is tiny
234gam0120 gamma -100.5 -> -3.3536908198076787e-159
235gam0121 gamma -160.5 -> -5.2555464470078293e-286
236gam0122 gamma -170.5 -> -3.3127395215386074e-308
237gam0123 gamma -171.5 -> 1.9316265431711902e-310
238gam0124 gamma -176.5 -> -1.1956388629358166e-321
239gam0125 gamma -177.5 -> 4.9406564584124654e-324
240gam0126 gamma -178.5 -> -0.0
241gam0127 gamma -179.5 -> 0.0
242gam0128 gamma -201.0001 -> 0.0
243gam0129 gamma -202.9999 -> -0.0
244gam0130 gamma -1000.5 -> -0.0
245gam0131 gamma -1000000000.3 -> -0.0
246gam0132 gamma -4503599627370495.5 -> 0.0
247
248-- inputs that cause problems for the standard reflection formula,
249-- thanks to loss of accuracy in 1-x
250gam0140 gamma -63.349078729022985 -> 4.1777971677761880e-88
251gam0141 gamma -127.45117632943295 -> 1.1831110896236810e-214
Mark Dickinson9cae1782009-12-16 20:13:40 +0000252
253-----------------------------------------------------------
254-- expm1: exp(x) - 1, without precision loss for small x --
255-----------------------------------------------------------
256
257-- special values
258expm10000 expm1 0.0 -> 0.0
259expm10001 expm1 -0.0 -> -0.0
260expm10002 expm1 inf -> inf
261expm10003 expm1 -inf -> -1.0
262expm10004 expm1 nan -> nan
263
264-- expm1(x) ~ x for tiny x
265expm10010 expm1 5e-324 -> 5e-324
266expm10011 expm1 1e-320 -> 1e-320
267expm10012 expm1 1e-300 -> 1e-300
268expm10013 expm1 1e-150 -> 1e-150
269expm10014 expm1 1e-20 -> 1e-20
270
271expm10020 expm1 -5e-324 -> -5e-324
272expm10021 expm1 -1e-320 -> -1e-320
273expm10022 expm1 -1e-300 -> -1e-300
274expm10023 expm1 -1e-150 -> -1e-150
275expm10024 expm1 -1e-20 -> -1e-20
276
277-- moderate sized values, where direct evaluation runs into trouble
278expm10100 expm1 1e-10 -> 1.0000000000500000e-10
279expm10101 expm1 -9.9999999999999995e-08 -> -9.9999995000000163e-8
280expm10102 expm1 3.0000000000000001e-05 -> 3.0000450004500034e-5
281expm10103 expm1 -0.0070000000000000001 -> -0.0069755570667648951
282expm10104 expm1 -0.071499208740094633 -> -0.069002985744820250
283expm10105 expm1 -0.063296004180116799 -> -0.061334416373633009
284expm10106 expm1 0.02390954035597756 -> 0.024197665143819942
285expm10107 expm1 0.085637352649044901 -> 0.089411184580357767
286expm10108 expm1 0.5966174947411006 -> 0.81596588596501485
287expm10109 expm1 0.30247206212075139 -> 0.35319987035848677
288expm10110 expm1 0.74574727375889516 -> 1.1080161116737459
289expm10111 expm1 0.97767512926555711 -> 1.6582689207372185
290expm10112 expm1 0.8450154566787712 -> 1.3280137976535897
291expm10113 expm1 -0.13979260323125264 -> -0.13046144381396060
292expm10114 expm1 -0.52899322039643271 -> -0.41080213643695923
293expm10115 expm1 -0.74083261478900631 -> -0.52328317124797097
294expm10116 expm1 -0.93847766984546055 -> -0.60877704724085946
295expm10117 expm1 10.0 -> 22025.465794806718
296expm10118 expm1 27.0 -> 532048240600.79865
297expm10119 expm1 123 -> 2.6195173187490626e+53
298expm10120 expm1 -12.0 -> -0.99999385578764666
299expm10121 expm1 -35.100000000000001 -> -0.99999999999999944
300
301-- extreme negative values
302expm10201 expm1 -37.0 -> -0.99999999999999989
303expm10200 expm1 -38.0 -> -1.0
304expm10210 expm1 -710.0 -> -1.0
305-- the formula expm1(x) = 2 * sinh(x/2) * exp(x/2) doesn't work so
306-- well when exp(x/2) is subnormal or underflows to zero; check we're
307-- not using it!
308expm10211 expm1 -1420.0 -> -1.0
309expm10212 expm1 -1450.0 -> -1.0
310expm10213 expm1 -1500.0 -> -1.0
311expm10214 expm1 -1e50 -> -1.0
312expm10215 expm1 -1.79e308 -> -1.0
313
314-- extreme positive values
315expm10300 expm1 300 -> 1.9424263952412558e+130
316expm10301 expm1 700 -> 1.0142320547350045e+304
317expm10302 expm1 709.78271289328393 -> 1.7976931346824240e+308
318expm10303 expm1 709.78271289348402 -> inf overflow
319expm10304 expm1 1000 -> inf overflow
320expm10305 expm1 1e50 -> inf overflow
321expm10306 expm1 1.79e308 -> inf overflow