blob: 764c0e02cbe549f6eeab0c5e5fffb1c9145d8ffd [file] [log] [blame]
Mark Dickinson12c4bdb2009-09-28 19:21:11 +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
50---------------------------
51-- gamma: Gamma function --
52---------------------------
53
54-- special values
55gam0000 gamma 0.0 -> inf divide-by-zero
56gam0001 gamma -0.0 -> -inf divide-by-zero
57gam0002 gamma inf -> inf
58gam0003 gamma -inf -> nan invalid
59gam0004 gamma nan -> nan
60
61-- negative integers inputs are invalid
62gam0010 gamma -1 -> nan invalid
63gam0011 gamma -2 -> nan invalid
64gam0012 gamma -1e16 -> nan invalid
65gam0013 gamma -1e300 -> nan invalid
66
67-- small positive integers give factorials
68gam0020 gamma 1 -> 1
69gam0021 gamma 2 -> 1
70gam0022 gamma 3 -> 2
71gam0023 gamma 4 -> 6
72gam0024 gamma 5 -> 24
73gam0025 gamma 6 -> 120
74
75-- half integers
76gam0030 gamma 0.5 -> 1.7724538509055161
77gam0031 gamma 1.5 -> 0.88622692545275805
78gam0032 gamma 2.5 -> 1.3293403881791370
79gam0033 gamma 3.5 -> 3.3233509704478426
80gam0034 gamma -0.5 -> -3.5449077018110322
81gam0035 gamma -1.5 -> 2.3632718012073548
82gam0036 gamma -2.5 -> -0.94530872048294190
83gam0037 gamma -3.5 -> 0.27008820585226911
84
85-- values near 0
86gam0040 gamma 0.1 -> 9.5135076986687306
87gam0041 gamma 0.01 -> 99.432585119150602
88gam0042 gamma 1e-8 -> 99999999.422784343
89gam0043 gamma 1e-16 -> 10000000000000000
90gam0044 gamma 1e-30 -> 9.9999999999999988e+29
91gam0045 gamma 1e-160 -> 1.0000000000000000e+160
92gam0046 gamma 1e-308 -> 1.0000000000000000e+308
93gam0047 gamma 5.6e-309 -> 1.7857142857142848e+308
94gam0048 gamma 5.5e-309 -> inf overflow
95gam0049 gamma 1e-309 -> inf overflow
96gam0050 gamma 1e-323 -> inf overflow
97gam0051 gamma 5e-324 -> inf overflow
98gam0060 gamma -0.1 -> -10.686287021193193
99gam0061 gamma -0.01 -> -100.58719796441078
100gam0062 gamma -1e-8 -> -100000000.57721567
101gam0063 gamma -1e-16 -> -10000000000000000
102gam0064 gamma -1e-30 -> -9.9999999999999988e+29
103gam0065 gamma -1e-160 -> -1.0000000000000000e+160
104gam0066 gamma -1e-308 -> -1.0000000000000000e+308
105gam0067 gamma -5.6e-309 -> -1.7857142857142848e+308
106gam0068 gamma -5.5e-309 -> -inf overflow
107gam0069 gamma -1e-309 -> -inf overflow
108gam0070 gamma -1e-323 -> -inf overflow
109gam0071 gamma -5e-324 -> -inf overflow
110
111-- values near negative integers
112gam0080 gamma -0.99999999999999989 -> -9007199254740992.0
113gam0081 gamma -1.0000000000000002 -> 4503599627370495.5
114gam0082 gamma -1.9999999999999998 -> 2251799813685248.5
115gam0083 gamma -2.0000000000000004 -> -1125899906842623.5
116gam0084 gamma -100.00000000000001 -> -7.5400833348831090e-145
117gam0085 gamma -99.999999999999986 -> 7.5400833348840962e-145
118
119-- large inputs
120gam0100 gamma 170 -> 4.2690680090047051e+304
121gam0101 gamma 171 -> 7.2574156153079990e+306
122gam0102 gamma 171.624 -> 1.7942117599248104e+308
123gam0103 gamma 171.625 -> inf overflow
124gam0104 gamma 172 -> inf overflow
125gam0105 gamma 2000 -> inf overflow
126gam0106 gamma 1.7e308 -> inf overflow
127
128-- inputs for which gamma(x) is tiny
129gam0120 gamma -100.5 -> -3.3536908198076787e-159
130gam0121 gamma -160.5 -> -5.2555464470078293e-286
131gam0122 gamma -170.5 -> -3.3127395215386074e-308
132gam0123 gamma -171.5 -> 1.9316265431711902e-310
133gam0124 gamma -176.5 -> -1.1956388629358166e-321
134gam0125 gamma -177.5 -> 4.9406564584124654e-324
135gam0126 gamma -178.5 -> -0.0
136gam0127 gamma -179.5 -> 0.0
137gam0128 gamma -201.0001 -> 0.0
138gam0129 gamma -202.9999 -> -0.0
139gam0130 gamma -1000.5 -> -0.0
140gam0131 gamma -1000000000.3 -> -0.0
141gam0132 gamma -4503599627370495.5 -> 0.0
142
143-- inputs that cause problems for the standard reflection formula,
144-- thanks to loss of accuracy in 1-x
145gam0140 gamma -63.349078729022985 -> 4.1777971677761880e-88
146gam0141 gamma -127.45117632943295 -> 1.1831110896236810e-214