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 ------------------------- 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 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 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 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 168 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 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 371 372 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 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 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 445 446 -- weaker version of expm10302 447 expm10307 expm1 709.5 -> 1.3549863193146328e+308 448