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 | 5ff37ae | 2009-12-19 11:07:23 +0000 | [diff] [blame] | 50 | |
| 51 | ------------------------- |
| 52 | -- erf: error function -- |
| 53 | ------------------------- |
| 54 | |
| 55 | erf0000 erf 0.0 -> 0.0 |
| 56 | erf0001 erf -0.0 -> -0.0 |
| 57 | erf0002 erf inf -> 1.0 |
| 58 | erf0003 erf -inf -> -1.0 |
| 59 | erf0004 erf nan -> nan |
| 60 | |
| 61 | -- tiny values |
| 62 | erf0010 erf 1e-308 -> 1.1283791670955125e-308 |
| 63 | erf0011 erf 5e-324 -> 4.9406564584124654e-324 |
| 64 | erf0012 erf 1e-10 -> 1.1283791670955126e-10 |
| 65 | |
| 66 | -- small integers |
| 67 | erf0020 erf 1 -> 0.84270079294971489 |
| 68 | erf0021 erf 2 -> 0.99532226501895271 |
| 69 | erf0022 erf 3 -> 0.99997790950300136 |
| 70 | erf0023 erf 4 -> 0.99999998458274209 |
| 71 | erf0024 erf 5 -> 0.99999999999846256 |
| 72 | erf0025 erf 6 -> 1.0 |
| 73 | |
| 74 | erf0030 erf -1 -> -0.84270079294971489 |
| 75 | erf0031 erf -2 -> -0.99532226501895271 |
| 76 | erf0032 erf -3 -> -0.99997790950300136 |
| 77 | erf0033 erf -4 -> -0.99999998458274209 |
| 78 | erf0034 erf -5 -> -0.99999999999846256 |
| 79 | erf0035 erf -6 -> -1.0 |
| 80 | |
| 81 | -- huge values should all go to +/-1, depending on sign |
| 82 | erf0040 erf -40 -> -1.0 |
| 83 | erf0041 erf 1e16 -> 1.0 |
| 84 | erf0042 erf -1e150 -> -1.0 |
| 85 | erf0043 erf 1.7e308 -> 1.0 |
| 86 | |
Mark Dickinson | e979ec8 | 2010-06-13 10:50:29 +0000 | [diff] [blame] | 87 | -- Issue 8986: inputs x with exp(-x*x) near the underflow threshold |
| 88 | -- incorrectly signalled overflow on some platforms. |
| 89 | erf0100 erf 26.2 -> 1.0 |
| 90 | erf0101 erf 26.4 -> 1.0 |
| 91 | erf0102 erf 26.6 -> 1.0 |
| 92 | erf0103 erf 26.8 -> 1.0 |
| 93 | erf0104 erf 27.0 -> 1.0 |
| 94 | erf0105 erf 27.2 -> 1.0 |
| 95 | erf0106 erf 27.4 -> 1.0 |
| 96 | erf0107 erf 27.6 -> 1.0 |
| 97 | |
| 98 | erf0110 erf -26.2 -> -1.0 |
| 99 | erf0111 erf -26.4 -> -1.0 |
| 100 | erf0112 erf -26.6 -> -1.0 |
| 101 | erf0113 erf -26.8 -> -1.0 |
| 102 | erf0114 erf -27.0 -> -1.0 |
| 103 | erf0115 erf -27.2 -> -1.0 |
| 104 | erf0116 erf -27.4 -> -1.0 |
| 105 | erf0117 erf -27.6 -> -1.0 |
Mark Dickinson | 5ff37ae | 2009-12-19 11:07:23 +0000 | [diff] [blame] | 106 | |
| 107 | ---------------------------------------- |
| 108 | -- erfc: complementary error function -- |
| 109 | ---------------------------------------- |
| 110 | |
| 111 | erfc0000 erfc 0.0 -> 1.0 |
| 112 | erfc0001 erfc -0.0 -> 1.0 |
| 113 | erfc0002 erfc inf -> 0.0 |
| 114 | erfc0003 erfc -inf -> 2.0 |
| 115 | erfc0004 erfc nan -> nan |
| 116 | |
| 117 | -- tiny values |
| 118 | erfc0010 erfc 1e-308 -> 1.0 |
| 119 | erfc0011 erfc 5e-324 -> 1.0 |
| 120 | erfc0012 erfc 1e-10 -> 0.99999999988716204 |
| 121 | |
| 122 | -- small integers |
| 123 | erfc0020 erfc 1 -> 0.15729920705028513 |
| 124 | erfc0021 erfc 2 -> 0.0046777349810472662 |
| 125 | erfc0022 erfc 3 -> 2.2090496998585441e-05 |
| 126 | erfc0023 erfc 4 -> 1.541725790028002e-08 |
| 127 | erfc0024 erfc 5 -> 1.5374597944280349e-12 |
| 128 | erfc0025 erfc 6 -> 2.1519736712498913e-17 |
| 129 | |
| 130 | erfc0030 erfc -1 -> 1.8427007929497148 |
| 131 | erfc0031 erfc -2 -> 1.9953222650189528 |
| 132 | erfc0032 erfc -3 -> 1.9999779095030015 |
| 133 | erfc0033 erfc -4 -> 1.9999999845827421 |
| 134 | erfc0034 erfc -5 -> 1.9999999999984626 |
| 135 | erfc0035 erfc -6 -> 2.0 |
| 136 | |
| 137 | -- as x -> infinity, erfc(x) behaves like exp(-x*x)/x/sqrt(pi) |
| 138 | erfc0040 erfc 20 -> 5.3958656116079012e-176 |
| 139 | erfc0041 erfc 25 -> 8.3001725711965228e-274 |
| 140 | erfc0042 erfc 27 -> 5.2370464393526292e-319 |
| 141 | erfc0043 erfc 28 -> 0.0 |
| 142 | |
| 143 | -- huge values |
| 144 | erfc0050 erfc -40 -> 2.0 |
| 145 | erfc0051 erfc 1e16 -> 0.0 |
| 146 | erfc0052 erfc -1e150 -> 2.0 |
| 147 | erfc0053 erfc 1.7e308 -> 0.0 |
| 148 | |
Mark Dickinson | e979ec8 | 2010-06-13 10:50:29 +0000 | [diff] [blame] | 149 | -- Issue 8986: inputs x with exp(-x*x) near the underflow threshold |
| 150 | -- incorrectly signalled overflow on some platforms. |
| 151 | erfc0100 erfc 26.2 -> 1.6432507924389461e-300 |
| 152 | erfc0101 erfc 26.4 -> 4.4017768588035426e-305 |
| 153 | erfc0102 erfc 26.6 -> 1.0885125885442269e-309 |
| 154 | erfc0103 erfc 26.8 -> 2.4849621571966629e-314 |
| 155 | erfc0104 erfc 27.0 -> 5.2370464393526292e-319 |
| 156 | erfc0105 erfc 27.2 -> 9.8813129168249309e-324 |
| 157 | erfc0106 erfc 27.4 -> 0.0 |
| 158 | erfc0107 erfc 27.6 -> 0.0 |
| 159 | |
| 160 | erfc0110 erfc -26.2 -> 2.0 |
| 161 | erfc0111 erfc -26.4 -> 2.0 |
| 162 | erfc0112 erfc -26.6 -> 2.0 |
| 163 | erfc0113 erfc -26.8 -> 2.0 |
| 164 | erfc0114 erfc -27.0 -> 2.0 |
| 165 | erfc0115 erfc -27.2 -> 2.0 |
| 166 | erfc0116 erfc -27.4 -> 2.0 |
| 167 | erfc0117 erfc -27.6 -> 2.0 |
Mark Dickinson | 5ff37ae | 2009-12-19 11:07:23 +0000 | [diff] [blame] | 168 | |
Mark Dickinson | 9be87bc | 2009-12-11 17:29:33 +0000 | [diff] [blame] | 169 | --------------------------------------------------------- |
| 170 | -- lgamma: log of absolute value of the gamma function -- |
| 171 | --------------------------------------------------------- |
| 172 | |
| 173 | -- special values |
| 174 | lgam0000 lgamma 0.0 -> inf divide-by-zero |
| 175 | lgam0001 lgamma -0.0 -> inf divide-by-zero |
| 176 | lgam0002 lgamma inf -> inf |
| 177 | lgam0003 lgamma -inf -> inf |
| 178 | lgam0004 lgamma nan -> nan |
| 179 | |
| 180 | -- negative integers |
| 181 | lgam0010 lgamma -1 -> inf divide-by-zero |
| 182 | lgam0011 lgamma -2 -> inf divide-by-zero |
| 183 | lgam0012 lgamma -1e16 -> inf divide-by-zero |
| 184 | lgam0013 lgamma -1e300 -> inf divide-by-zero |
| 185 | lgam0014 lgamma -1.79e308 -> inf divide-by-zero |
| 186 | |
| 187 | -- small positive integers give factorials |
| 188 | lgam0020 lgamma 1 -> 0.0 |
| 189 | lgam0021 lgamma 2 -> 0.0 |
| 190 | lgam0022 lgamma 3 -> 0.69314718055994529 |
| 191 | lgam0023 lgamma 4 -> 1.791759469228055 |
| 192 | lgam0024 lgamma 5 -> 3.1780538303479458 |
| 193 | lgam0025 lgamma 6 -> 4.7874917427820458 |
| 194 | |
| 195 | -- half integers |
| 196 | lgam0030 lgamma 0.5 -> 0.57236494292470008 |
| 197 | lgam0031 lgamma 1.5 -> -0.12078223763524522 |
| 198 | lgam0032 lgamma 2.5 -> 0.28468287047291918 |
| 199 | lgam0033 lgamma 3.5 -> 1.2009736023470743 |
| 200 | lgam0034 lgamma -0.5 -> 1.2655121234846454 |
| 201 | lgam0035 lgamma -1.5 -> 0.86004701537648098 |
| 202 | lgam0036 lgamma -2.5 -> -0.056243716497674054 |
| 203 | lgam0037 lgamma -3.5 -> -1.309006684993042 |
| 204 | |
| 205 | -- values near 0 |
| 206 | lgam0040 lgamma 0.1 -> 2.252712651734206 |
| 207 | lgam0041 lgamma 0.01 -> 4.5994798780420219 |
| 208 | lgam0042 lgamma 1e-8 -> 18.420680738180209 |
| 209 | lgam0043 lgamma 1e-16 -> 36.841361487904734 |
| 210 | lgam0044 lgamma 1e-30 -> 69.077552789821368 |
| 211 | lgam0045 lgamma 1e-160 -> 368.41361487904732 |
| 212 | lgam0046 lgamma 1e-308 -> 709.19620864216608 |
| 213 | lgam0047 lgamma 5.6e-309 -> 709.77602713741896 |
| 214 | lgam0048 lgamma 5.5e-309 -> 709.79404564292167 |
| 215 | lgam0049 lgamma 1e-309 -> 711.49879373516012 |
| 216 | lgam0050 lgamma 1e-323 -> 743.74692474082133 |
| 217 | lgam0051 lgamma 5e-324 -> 744.44007192138122 |
| 218 | lgam0060 lgamma -0.1 -> 2.3689613327287886 |
| 219 | lgam0061 lgamma -0.01 -> 4.6110249927528013 |
| 220 | lgam0062 lgamma -1e-8 -> 18.420680749724522 |
| 221 | lgam0063 lgamma -1e-16 -> 36.841361487904734 |
| 222 | lgam0064 lgamma -1e-30 -> 69.077552789821368 |
| 223 | lgam0065 lgamma -1e-160 -> 368.41361487904732 |
| 224 | lgam0066 lgamma -1e-308 -> 709.19620864216608 |
| 225 | lgam0067 lgamma -5.6e-309 -> 709.77602713741896 |
| 226 | lgam0068 lgamma -5.5e-309 -> 709.79404564292167 |
| 227 | lgam0069 lgamma -1e-309 -> 711.49879373516012 |
| 228 | lgam0070 lgamma -1e-323 -> 743.74692474082133 |
| 229 | lgam0071 lgamma -5e-324 -> 744.44007192138122 |
| 230 | |
| 231 | -- values near negative integers |
| 232 | lgam0080 lgamma -0.99999999999999989 -> 36.736800569677101 |
| 233 | lgam0081 lgamma -1.0000000000000002 -> 36.043653389117154 |
| 234 | lgam0082 lgamma -1.9999999999999998 -> 35.350506208557213 |
| 235 | lgam0083 lgamma -2.0000000000000004 -> 34.657359027997266 |
| 236 | lgam0084 lgamma -100.00000000000001 -> -331.85460524980607 |
| 237 | lgam0085 lgamma -99.999999999999986 -> -331.85460524980596 |
| 238 | |
| 239 | -- large inputs |
| 240 | lgam0100 lgamma 170 -> 701.43726380873704 |
| 241 | lgam0101 lgamma 171 -> 706.57306224578736 |
| 242 | lgam0102 lgamma 171.624 -> 709.78077443669895 |
| 243 | lgam0103 lgamma 171.625 -> 709.78591682948365 |
| 244 | lgam0104 lgamma 172 -> 711.71472580228999 |
| 245 | lgam0105 lgamma 2000 -> 13198.923448054265 |
| 246 | lgam0106 lgamma 2.55998332785163e305 -> 1.7976931348623099e+308 |
| 247 | lgam0107 lgamma 2.55998332785164e305 -> inf overflow |
| 248 | lgam0108 lgamma 1.7e308 -> inf overflow |
| 249 | |
| 250 | -- inputs for which gamma(x) is tiny |
| 251 | lgam0120 lgamma -100.5 -> -364.90096830942736 |
| 252 | lgam0121 lgamma -160.5 -> -656.88005261126432 |
| 253 | lgam0122 lgamma -170.5 -> -707.99843314507882 |
| 254 | lgam0123 lgamma -171.5 -> -713.14301641168481 |
| 255 | lgam0124 lgamma -176.5 -> -738.95247590846486 |
| 256 | lgam0125 lgamma -177.5 -> -744.13144651738037 |
| 257 | lgam0126 lgamma -178.5 -> -749.3160351186001 |
| 258 | |
| 259 | lgam0130 lgamma -1000.5 -> -5914.4377011168517 |
| 260 | lgam0131 lgamma -30000.5 -> -279278.6629959144 |
| 261 | lgam0132 lgamma -4503599627370495.5 -> -1.5782258434492883e+17 |
| 262 | |
| 263 | -- results close to 0: positive argument ... |
| 264 | lgam0150 lgamma 0.99999999999999989 -> 6.4083812134800075e-17 |
| 265 | lgam0151 lgamma 1.0000000000000002 -> -1.2816762426960008e-16 |
| 266 | lgam0152 lgamma 1.9999999999999998 -> -9.3876980655431170e-17 |
| 267 | lgam0153 lgamma 2.0000000000000004 -> 1.8775396131086244e-16 |
| 268 | |
| 269 | -- ... and negative argument |
| 270 | lgam0160 lgamma -2.7476826467 -> -5.2477408147689136e-11 |
| 271 | lgam0161 lgamma -2.457024738 -> 3.3464637541912932e-10 |
| 272 | |
| 273 | |
Mark Dickinson | b93fff0 | 2009-09-28 18:54:55 +0000 | [diff] [blame] | 274 | --------------------------- |
| 275 | -- gamma: Gamma function -- |
| 276 | --------------------------- |
| 277 | |
| 278 | -- special values |
| 279 | gam0000 gamma 0.0 -> inf divide-by-zero |
| 280 | gam0001 gamma -0.0 -> -inf divide-by-zero |
| 281 | gam0002 gamma inf -> inf |
| 282 | gam0003 gamma -inf -> nan invalid |
| 283 | gam0004 gamma nan -> nan |
| 284 | |
| 285 | -- negative integers inputs are invalid |
| 286 | gam0010 gamma -1 -> nan invalid |
| 287 | gam0011 gamma -2 -> nan invalid |
| 288 | gam0012 gamma -1e16 -> nan invalid |
| 289 | gam0013 gamma -1e300 -> nan invalid |
| 290 | |
| 291 | -- small positive integers give factorials |
| 292 | gam0020 gamma 1 -> 1 |
| 293 | gam0021 gamma 2 -> 1 |
| 294 | gam0022 gamma 3 -> 2 |
| 295 | gam0023 gamma 4 -> 6 |
| 296 | gam0024 gamma 5 -> 24 |
| 297 | gam0025 gamma 6 -> 120 |
| 298 | |
| 299 | -- half integers |
| 300 | gam0030 gamma 0.5 -> 1.7724538509055161 |
| 301 | gam0031 gamma 1.5 -> 0.88622692545275805 |
| 302 | gam0032 gamma 2.5 -> 1.3293403881791370 |
| 303 | gam0033 gamma 3.5 -> 3.3233509704478426 |
| 304 | gam0034 gamma -0.5 -> -3.5449077018110322 |
| 305 | gam0035 gamma -1.5 -> 2.3632718012073548 |
| 306 | gam0036 gamma -2.5 -> -0.94530872048294190 |
| 307 | gam0037 gamma -3.5 -> 0.27008820585226911 |
| 308 | |
| 309 | -- values near 0 |
| 310 | gam0040 gamma 0.1 -> 9.5135076986687306 |
| 311 | gam0041 gamma 0.01 -> 99.432585119150602 |
| 312 | gam0042 gamma 1e-8 -> 99999999.422784343 |
| 313 | gam0043 gamma 1e-16 -> 10000000000000000 |
| 314 | gam0044 gamma 1e-30 -> 9.9999999999999988e+29 |
| 315 | gam0045 gamma 1e-160 -> 1.0000000000000000e+160 |
| 316 | gam0046 gamma 1e-308 -> 1.0000000000000000e+308 |
| 317 | gam0047 gamma 5.6e-309 -> 1.7857142857142848e+308 |
| 318 | gam0048 gamma 5.5e-309 -> inf overflow |
| 319 | gam0049 gamma 1e-309 -> inf overflow |
| 320 | gam0050 gamma 1e-323 -> inf overflow |
| 321 | gam0051 gamma 5e-324 -> inf overflow |
| 322 | gam0060 gamma -0.1 -> -10.686287021193193 |
| 323 | gam0061 gamma -0.01 -> -100.58719796441078 |
| 324 | gam0062 gamma -1e-8 -> -100000000.57721567 |
| 325 | gam0063 gamma -1e-16 -> -10000000000000000 |
| 326 | gam0064 gamma -1e-30 -> -9.9999999999999988e+29 |
| 327 | gam0065 gamma -1e-160 -> -1.0000000000000000e+160 |
| 328 | gam0066 gamma -1e-308 -> -1.0000000000000000e+308 |
| 329 | gam0067 gamma -5.6e-309 -> -1.7857142857142848e+308 |
| 330 | gam0068 gamma -5.5e-309 -> -inf overflow |
| 331 | gam0069 gamma -1e-309 -> -inf overflow |
| 332 | gam0070 gamma -1e-323 -> -inf overflow |
| 333 | gam0071 gamma -5e-324 -> -inf overflow |
| 334 | |
| 335 | -- values near negative integers |
| 336 | gam0080 gamma -0.99999999999999989 -> -9007199254740992.0 |
| 337 | gam0081 gamma -1.0000000000000002 -> 4503599627370495.5 |
| 338 | gam0082 gamma -1.9999999999999998 -> 2251799813685248.5 |
| 339 | gam0083 gamma -2.0000000000000004 -> -1125899906842623.5 |
| 340 | gam0084 gamma -100.00000000000001 -> -7.5400833348831090e-145 |
| 341 | gam0085 gamma -99.999999999999986 -> 7.5400833348840962e-145 |
| 342 | |
| 343 | -- large inputs |
| 344 | gam0100 gamma 170 -> 4.2690680090047051e+304 |
| 345 | gam0101 gamma 171 -> 7.2574156153079990e+306 |
| 346 | gam0102 gamma 171.624 -> 1.7942117599248104e+308 |
| 347 | gam0103 gamma 171.625 -> inf overflow |
| 348 | gam0104 gamma 172 -> inf overflow |
| 349 | gam0105 gamma 2000 -> inf overflow |
| 350 | gam0106 gamma 1.7e308 -> inf overflow |
| 351 | |
| 352 | -- inputs for which gamma(x) is tiny |
| 353 | gam0120 gamma -100.5 -> -3.3536908198076787e-159 |
| 354 | gam0121 gamma -160.5 -> -5.2555464470078293e-286 |
| 355 | gam0122 gamma -170.5 -> -3.3127395215386074e-308 |
| 356 | gam0123 gamma -171.5 -> 1.9316265431711902e-310 |
| 357 | gam0124 gamma -176.5 -> -1.1956388629358166e-321 |
| 358 | gam0125 gamma -177.5 -> 4.9406564584124654e-324 |
| 359 | gam0126 gamma -178.5 -> -0.0 |
| 360 | gam0127 gamma -179.5 -> 0.0 |
| 361 | gam0128 gamma -201.0001 -> 0.0 |
| 362 | gam0129 gamma -202.9999 -> -0.0 |
| 363 | gam0130 gamma -1000.5 -> -0.0 |
| 364 | gam0131 gamma -1000000000.3 -> -0.0 |
| 365 | gam0132 gamma -4503599627370495.5 -> 0.0 |
| 366 | |
| 367 | -- inputs that cause problems for the standard reflection formula, |
| 368 | -- thanks to loss of accuracy in 1-x |
| 369 | gam0140 gamma -63.349078729022985 -> 4.1777971677761880e-88 |
| 370 | gam0141 gamma -127.45117632943295 -> 1.1831110896236810e-214 |
Mark Dickinson | 9cae178 | 2009-12-16 20:13:40 +0000 | [diff] [blame] | 371 | |
Mark Dickinson | 5ff37ae | 2009-12-19 11:07:23 +0000 | [diff] [blame] | 372 | |
Mark Dickinson | 9cae178 | 2009-12-16 20:13:40 +0000 | [diff] [blame] | 373 | ----------------------------------------------------------- |
| 374 | -- expm1: exp(x) - 1, without precision loss for small x -- |
| 375 | ----------------------------------------------------------- |
| 376 | |
| 377 | -- special values |
| 378 | expm10000 expm1 0.0 -> 0.0 |
| 379 | expm10001 expm1 -0.0 -> -0.0 |
| 380 | expm10002 expm1 inf -> inf |
| 381 | expm10003 expm1 -inf -> -1.0 |
| 382 | expm10004 expm1 nan -> nan |
| 383 | |
| 384 | -- expm1(x) ~ x for tiny x |
| 385 | expm10010 expm1 5e-324 -> 5e-324 |
| 386 | expm10011 expm1 1e-320 -> 1e-320 |
| 387 | expm10012 expm1 1e-300 -> 1e-300 |
| 388 | expm10013 expm1 1e-150 -> 1e-150 |
| 389 | expm10014 expm1 1e-20 -> 1e-20 |
| 390 | |
| 391 | expm10020 expm1 -5e-324 -> -5e-324 |
| 392 | expm10021 expm1 -1e-320 -> -1e-320 |
| 393 | expm10022 expm1 -1e-300 -> -1e-300 |
| 394 | expm10023 expm1 -1e-150 -> -1e-150 |
| 395 | expm10024 expm1 -1e-20 -> -1e-20 |
| 396 | |
| 397 | -- moderate sized values, where direct evaluation runs into trouble |
| 398 | expm10100 expm1 1e-10 -> 1.0000000000500000e-10 |
| 399 | expm10101 expm1 -9.9999999999999995e-08 -> -9.9999995000000163e-8 |
| 400 | expm10102 expm1 3.0000000000000001e-05 -> 3.0000450004500034e-5 |
| 401 | expm10103 expm1 -0.0070000000000000001 -> -0.0069755570667648951 |
| 402 | expm10104 expm1 -0.071499208740094633 -> -0.069002985744820250 |
| 403 | expm10105 expm1 -0.063296004180116799 -> -0.061334416373633009 |
| 404 | expm10106 expm1 0.02390954035597756 -> 0.024197665143819942 |
| 405 | expm10107 expm1 0.085637352649044901 -> 0.089411184580357767 |
| 406 | expm10108 expm1 0.5966174947411006 -> 0.81596588596501485 |
| 407 | expm10109 expm1 0.30247206212075139 -> 0.35319987035848677 |
| 408 | expm10110 expm1 0.74574727375889516 -> 1.1080161116737459 |
| 409 | expm10111 expm1 0.97767512926555711 -> 1.6582689207372185 |
| 410 | expm10112 expm1 0.8450154566787712 -> 1.3280137976535897 |
| 411 | expm10113 expm1 -0.13979260323125264 -> -0.13046144381396060 |
| 412 | expm10114 expm1 -0.52899322039643271 -> -0.41080213643695923 |
| 413 | expm10115 expm1 -0.74083261478900631 -> -0.52328317124797097 |
| 414 | expm10116 expm1 -0.93847766984546055 -> -0.60877704724085946 |
| 415 | expm10117 expm1 10.0 -> 22025.465794806718 |
| 416 | expm10118 expm1 27.0 -> 532048240600.79865 |
| 417 | expm10119 expm1 123 -> 2.6195173187490626e+53 |
| 418 | expm10120 expm1 -12.0 -> -0.99999385578764666 |
| 419 | expm10121 expm1 -35.100000000000001 -> -0.99999999999999944 |
| 420 | |
| 421 | -- extreme negative values |
| 422 | expm10201 expm1 -37.0 -> -0.99999999999999989 |
| 423 | expm10200 expm1 -38.0 -> -1.0 |
| 424 | expm10210 expm1 -710.0 -> -1.0 |
| 425 | -- the formula expm1(x) = 2 * sinh(x/2) * exp(x/2) doesn't work so |
| 426 | -- well when exp(x/2) is subnormal or underflows to zero; check we're |
| 427 | -- not using it! |
| 428 | expm10211 expm1 -1420.0 -> -1.0 |
| 429 | expm10212 expm1 -1450.0 -> -1.0 |
| 430 | expm10213 expm1 -1500.0 -> -1.0 |
| 431 | expm10214 expm1 -1e50 -> -1.0 |
| 432 | expm10215 expm1 -1.79e308 -> -1.0 |
| 433 | |
| 434 | -- extreme positive values |
| 435 | expm10300 expm1 300 -> 1.9424263952412558e+130 |
| 436 | expm10301 expm1 700 -> 1.0142320547350045e+304 |
Mark Dickinson | 8e3e1d6 | 2009-12-29 20:51:24 +0000 | [diff] [blame] | 437 | -- the next test (expm10302) is disabled because it causes failure on |
| 438 | -- OS X 10.4/Intel: apparently all values over 709.78 produce an |
| 439 | -- overflow on that platform. See issue #7575. |
| 440 | -- expm10302 expm1 709.78271289328393 -> 1.7976931346824240e+308 |
Mark Dickinson | 9cae178 | 2009-12-16 20:13:40 +0000 | [diff] [blame] | 441 | expm10303 expm1 709.78271289348402 -> inf overflow |
| 442 | expm10304 expm1 1000 -> inf overflow |
| 443 | expm10305 expm1 1e50 -> inf overflow |
| 444 | expm10306 expm1 1.79e308 -> inf overflow |
Mark Dickinson | 8e3e1d6 | 2009-12-29 20:51:24 +0000 | [diff] [blame] | 445 | |
| 446 | -- weaker version of expm10302 |
| 447 | expm10307 expm1 709.5 -> 1.3549863193146328e+308 |