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