Mark Dickinson | b93fff0 | 2009-09-28 18:54:55 +0000 | [diff] [blame] | 1 | -- 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 Dickinson | 9be87bc | 2009-12-11 17:29:33 +0000 | [diff] [blame^] | 50 | --------------------------------------------------------- |
| 51 | -- lgamma: log of absolute value of the gamma function -- |
| 52 | --------------------------------------------------------- |
| 53 | |
| 54 | -- special values |
| 55 | lgam0000 lgamma 0.0 -> inf divide-by-zero |
| 56 | lgam0001 lgamma -0.0 -> inf divide-by-zero |
| 57 | lgam0002 lgamma inf -> inf |
| 58 | lgam0003 lgamma -inf -> inf |
| 59 | lgam0004 lgamma nan -> nan |
| 60 | |
| 61 | -- negative integers |
| 62 | lgam0010 lgamma -1 -> inf divide-by-zero |
| 63 | lgam0011 lgamma -2 -> inf divide-by-zero |
| 64 | lgam0012 lgamma -1e16 -> inf divide-by-zero |
| 65 | lgam0013 lgamma -1e300 -> inf divide-by-zero |
| 66 | lgam0014 lgamma -1.79e308 -> inf divide-by-zero |
| 67 | |
| 68 | -- small positive integers give factorials |
| 69 | lgam0020 lgamma 1 -> 0.0 |
| 70 | lgam0021 lgamma 2 -> 0.0 |
| 71 | lgam0022 lgamma 3 -> 0.69314718055994529 |
| 72 | lgam0023 lgamma 4 -> 1.791759469228055 |
| 73 | lgam0024 lgamma 5 -> 3.1780538303479458 |
| 74 | lgam0025 lgamma 6 -> 4.7874917427820458 |
| 75 | |
| 76 | -- half integers |
| 77 | lgam0030 lgamma 0.5 -> 0.57236494292470008 |
| 78 | lgam0031 lgamma 1.5 -> -0.12078223763524522 |
| 79 | lgam0032 lgamma 2.5 -> 0.28468287047291918 |
| 80 | lgam0033 lgamma 3.5 -> 1.2009736023470743 |
| 81 | lgam0034 lgamma -0.5 -> 1.2655121234846454 |
| 82 | lgam0035 lgamma -1.5 -> 0.86004701537648098 |
| 83 | lgam0036 lgamma -2.5 -> -0.056243716497674054 |
| 84 | lgam0037 lgamma -3.5 -> -1.309006684993042 |
| 85 | |
| 86 | -- values near 0 |
| 87 | lgam0040 lgamma 0.1 -> 2.252712651734206 |
| 88 | lgam0041 lgamma 0.01 -> 4.5994798780420219 |
| 89 | lgam0042 lgamma 1e-8 -> 18.420680738180209 |
| 90 | lgam0043 lgamma 1e-16 -> 36.841361487904734 |
| 91 | lgam0044 lgamma 1e-30 -> 69.077552789821368 |
| 92 | lgam0045 lgamma 1e-160 -> 368.41361487904732 |
| 93 | lgam0046 lgamma 1e-308 -> 709.19620864216608 |
| 94 | lgam0047 lgamma 5.6e-309 -> 709.77602713741896 |
| 95 | lgam0048 lgamma 5.5e-309 -> 709.79404564292167 |
| 96 | lgam0049 lgamma 1e-309 -> 711.49879373516012 |
| 97 | lgam0050 lgamma 1e-323 -> 743.74692474082133 |
| 98 | lgam0051 lgamma 5e-324 -> 744.44007192138122 |
| 99 | lgam0060 lgamma -0.1 -> 2.3689613327287886 |
| 100 | lgam0061 lgamma -0.01 -> 4.6110249927528013 |
| 101 | lgam0062 lgamma -1e-8 -> 18.420680749724522 |
| 102 | lgam0063 lgamma -1e-16 -> 36.841361487904734 |
| 103 | lgam0064 lgamma -1e-30 -> 69.077552789821368 |
| 104 | lgam0065 lgamma -1e-160 -> 368.41361487904732 |
| 105 | lgam0066 lgamma -1e-308 -> 709.19620864216608 |
| 106 | lgam0067 lgamma -5.6e-309 -> 709.77602713741896 |
| 107 | lgam0068 lgamma -5.5e-309 -> 709.79404564292167 |
| 108 | lgam0069 lgamma -1e-309 -> 711.49879373516012 |
| 109 | lgam0070 lgamma -1e-323 -> 743.74692474082133 |
| 110 | lgam0071 lgamma -5e-324 -> 744.44007192138122 |
| 111 | |
| 112 | -- values near negative integers |
| 113 | lgam0080 lgamma -0.99999999999999989 -> 36.736800569677101 |
| 114 | lgam0081 lgamma -1.0000000000000002 -> 36.043653389117154 |
| 115 | lgam0082 lgamma -1.9999999999999998 -> 35.350506208557213 |
| 116 | lgam0083 lgamma -2.0000000000000004 -> 34.657359027997266 |
| 117 | lgam0084 lgamma -100.00000000000001 -> -331.85460524980607 |
| 118 | lgam0085 lgamma -99.999999999999986 -> -331.85460524980596 |
| 119 | |
| 120 | -- large inputs |
| 121 | lgam0100 lgamma 170 -> 701.43726380873704 |
| 122 | lgam0101 lgamma 171 -> 706.57306224578736 |
| 123 | lgam0102 lgamma 171.624 -> 709.78077443669895 |
| 124 | lgam0103 lgamma 171.625 -> 709.78591682948365 |
| 125 | lgam0104 lgamma 172 -> 711.71472580228999 |
| 126 | lgam0105 lgamma 2000 -> 13198.923448054265 |
| 127 | lgam0106 lgamma 2.55998332785163e305 -> 1.7976931348623099e+308 |
| 128 | lgam0107 lgamma 2.55998332785164e305 -> inf overflow |
| 129 | lgam0108 lgamma 1.7e308 -> inf overflow |
| 130 | |
| 131 | -- inputs for which gamma(x) is tiny |
| 132 | lgam0120 lgamma -100.5 -> -364.90096830942736 |
| 133 | lgam0121 lgamma -160.5 -> -656.88005261126432 |
| 134 | lgam0122 lgamma -170.5 -> -707.99843314507882 |
| 135 | lgam0123 lgamma -171.5 -> -713.14301641168481 |
| 136 | lgam0124 lgamma -176.5 -> -738.95247590846486 |
| 137 | lgam0125 lgamma -177.5 -> -744.13144651738037 |
| 138 | lgam0126 lgamma -178.5 -> -749.3160351186001 |
| 139 | |
| 140 | lgam0130 lgamma -1000.5 -> -5914.4377011168517 |
| 141 | lgam0131 lgamma -30000.5 -> -279278.6629959144 |
| 142 | lgam0132 lgamma -4503599627370495.5 -> -1.5782258434492883e+17 |
| 143 | |
| 144 | -- results close to 0: positive argument ... |
| 145 | lgam0150 lgamma 0.99999999999999989 -> 6.4083812134800075e-17 |
| 146 | lgam0151 lgamma 1.0000000000000002 -> -1.2816762426960008e-16 |
| 147 | lgam0152 lgamma 1.9999999999999998 -> -9.3876980655431170e-17 |
| 148 | lgam0153 lgamma 2.0000000000000004 -> 1.8775396131086244e-16 |
| 149 | |
| 150 | -- ... and negative argument |
| 151 | lgam0160 lgamma -2.7476826467 -> -5.2477408147689136e-11 |
| 152 | lgam0161 lgamma -2.457024738 -> 3.3464637541912932e-10 |
| 153 | |
| 154 | |
Mark Dickinson | b93fff0 | 2009-09-28 18:54:55 +0000 | [diff] [blame] | 155 | --------------------------- |
| 156 | -- gamma: Gamma function -- |
| 157 | --------------------------- |
| 158 | |
| 159 | -- special values |
| 160 | gam0000 gamma 0.0 -> inf divide-by-zero |
| 161 | gam0001 gamma -0.0 -> -inf divide-by-zero |
| 162 | gam0002 gamma inf -> inf |
| 163 | gam0003 gamma -inf -> nan invalid |
| 164 | gam0004 gamma nan -> nan |
| 165 | |
| 166 | -- negative integers inputs are invalid |
| 167 | gam0010 gamma -1 -> nan invalid |
| 168 | gam0011 gamma -2 -> nan invalid |
| 169 | gam0012 gamma -1e16 -> nan invalid |
| 170 | gam0013 gamma -1e300 -> nan invalid |
| 171 | |
| 172 | -- small positive integers give factorials |
| 173 | gam0020 gamma 1 -> 1 |
| 174 | gam0021 gamma 2 -> 1 |
| 175 | gam0022 gamma 3 -> 2 |
| 176 | gam0023 gamma 4 -> 6 |
| 177 | gam0024 gamma 5 -> 24 |
| 178 | gam0025 gamma 6 -> 120 |
| 179 | |
| 180 | -- half integers |
| 181 | gam0030 gamma 0.5 -> 1.7724538509055161 |
| 182 | gam0031 gamma 1.5 -> 0.88622692545275805 |
| 183 | gam0032 gamma 2.5 -> 1.3293403881791370 |
| 184 | gam0033 gamma 3.5 -> 3.3233509704478426 |
| 185 | gam0034 gamma -0.5 -> -3.5449077018110322 |
| 186 | gam0035 gamma -1.5 -> 2.3632718012073548 |
| 187 | gam0036 gamma -2.5 -> -0.94530872048294190 |
| 188 | gam0037 gamma -3.5 -> 0.27008820585226911 |
| 189 | |
| 190 | -- values near 0 |
| 191 | gam0040 gamma 0.1 -> 9.5135076986687306 |
| 192 | gam0041 gamma 0.01 -> 99.432585119150602 |
| 193 | gam0042 gamma 1e-8 -> 99999999.422784343 |
| 194 | gam0043 gamma 1e-16 -> 10000000000000000 |
| 195 | gam0044 gamma 1e-30 -> 9.9999999999999988e+29 |
| 196 | gam0045 gamma 1e-160 -> 1.0000000000000000e+160 |
| 197 | gam0046 gamma 1e-308 -> 1.0000000000000000e+308 |
| 198 | gam0047 gamma 5.6e-309 -> 1.7857142857142848e+308 |
| 199 | gam0048 gamma 5.5e-309 -> inf overflow |
| 200 | gam0049 gamma 1e-309 -> inf overflow |
| 201 | gam0050 gamma 1e-323 -> inf overflow |
| 202 | gam0051 gamma 5e-324 -> inf overflow |
| 203 | gam0060 gamma -0.1 -> -10.686287021193193 |
| 204 | gam0061 gamma -0.01 -> -100.58719796441078 |
| 205 | gam0062 gamma -1e-8 -> -100000000.57721567 |
| 206 | gam0063 gamma -1e-16 -> -10000000000000000 |
| 207 | gam0064 gamma -1e-30 -> -9.9999999999999988e+29 |
| 208 | gam0065 gamma -1e-160 -> -1.0000000000000000e+160 |
| 209 | gam0066 gamma -1e-308 -> -1.0000000000000000e+308 |
| 210 | gam0067 gamma -5.6e-309 -> -1.7857142857142848e+308 |
| 211 | gam0068 gamma -5.5e-309 -> -inf overflow |
| 212 | gam0069 gamma -1e-309 -> -inf overflow |
| 213 | gam0070 gamma -1e-323 -> -inf overflow |
| 214 | gam0071 gamma -5e-324 -> -inf overflow |
| 215 | |
| 216 | -- values near negative integers |
| 217 | gam0080 gamma -0.99999999999999989 -> -9007199254740992.0 |
| 218 | gam0081 gamma -1.0000000000000002 -> 4503599627370495.5 |
| 219 | gam0082 gamma -1.9999999999999998 -> 2251799813685248.5 |
| 220 | gam0083 gamma -2.0000000000000004 -> -1125899906842623.5 |
| 221 | gam0084 gamma -100.00000000000001 -> -7.5400833348831090e-145 |
| 222 | gam0085 gamma -99.999999999999986 -> 7.5400833348840962e-145 |
| 223 | |
| 224 | -- large inputs |
| 225 | gam0100 gamma 170 -> 4.2690680090047051e+304 |
| 226 | gam0101 gamma 171 -> 7.2574156153079990e+306 |
| 227 | gam0102 gamma 171.624 -> 1.7942117599248104e+308 |
| 228 | gam0103 gamma 171.625 -> inf overflow |
| 229 | gam0104 gamma 172 -> inf overflow |
| 230 | gam0105 gamma 2000 -> inf overflow |
| 231 | gam0106 gamma 1.7e308 -> inf overflow |
| 232 | |
| 233 | -- inputs for which gamma(x) is tiny |
| 234 | gam0120 gamma -100.5 -> -3.3536908198076787e-159 |
| 235 | gam0121 gamma -160.5 -> -5.2555464470078293e-286 |
| 236 | gam0122 gamma -170.5 -> -3.3127395215386074e-308 |
| 237 | gam0123 gamma -171.5 -> 1.9316265431711902e-310 |
| 238 | gam0124 gamma -176.5 -> -1.1956388629358166e-321 |
| 239 | gam0125 gamma -177.5 -> 4.9406564584124654e-324 |
| 240 | gam0126 gamma -178.5 -> -0.0 |
| 241 | gam0127 gamma -179.5 -> 0.0 |
| 242 | gam0128 gamma -201.0001 -> 0.0 |
| 243 | gam0129 gamma -202.9999 -> -0.0 |
| 244 | gam0130 gamma -1000.5 -> -0.0 |
| 245 | gam0131 gamma -1000000000.3 -> -0.0 |
| 246 | gam0132 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 |
| 250 | gam0140 gamma -63.349078729022985 -> 4.1777971677761880e-88 |
| 251 | gam0141 gamma -127.45117632943295 -> 1.1831110896236810e-214 |