Home | History | Annotate | Download | only in test
      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 -- log1p: log(1 + x), without precision loss for small x --
    375 -----------------------------------------------------------
    376 
    377 -- special values
    378 log1p0000 log1p 0.0 -> 0.0
    379 log1p0001 log1p -0.0 -> -0.0
    380 log1p0002 log1p inf -> inf
    381 log1p0003 log1p -inf -> nan             invalid
    382 log1p0004 log1p nan -> nan
    383 
    384 -- singularity at -1.0
    385 log1p0010 log1p -1.0 -> -inf            divide-by-zero
    386 log1p0011 log1p -0.9999999999999999 -> -36.736800569677101
    387 
    388 -- finite values < 1.0 are invalid
    389 log1p0020 log1p -1.0000000000000002 -> nan invalid
    390 log1p0021 log1p -1.1 -> nan invalid
    391 log1p0022 log1p -2.0 -> nan invalid
    392 log1p0023 log1p -1e300 -> nan invalid
    393 
    394 -- tiny x: log1p(x) ~ x
    395 log1p0110 log1p 5e-324 -> 5e-324
    396 log1p0111 log1p 1e-320 -> 1e-320
    397 log1p0112 log1p 1e-300 -> 1e-300
    398 log1p0113 log1p 1e-150 -> 1e-150
    399 log1p0114 log1p 1e-20 -> 1e-20
    400 
    401 log1p0120 log1p -5e-324 -> -5e-324
    402 log1p0121 log1p -1e-320 -> -1e-320
    403 log1p0122 log1p -1e-300 -> -1e-300
    404 log1p0123 log1p -1e-150 -> -1e-150
    405 log1p0124 log1p -1e-20 -> -1e-20
    406 
    407 -- some (mostly) random small and moderate-sized values
    408 log1p0200 log1p -0.89156889782277482 -> -2.2216403106762863
    409 log1p0201 log1p -0.23858496047770464 -> -0.27257668276980057
    410 log1p0202 log1p -0.011641726191307515 -> -0.011710021654495657
    411 log1p0203 log1p -0.0090126398571693817 -> -0.0090534993825007650
    412 log1p0204 log1p -0.00023442805985712781 -> -0.00023445554240995693
    413 log1p0205 log1p -1.5672870980936349e-5 -> -1.5672993801662046e-5
    414 log1p0206 log1p -7.9650013274825295e-6 -> -7.9650330482740401e-6
    415 log1p0207 log1p -2.5202948343227410e-7 -> -2.5202951519170971e-7
    416 log1p0208 log1p -8.2446372820745855e-11 -> -8.2446372824144559e-11
    417 log1p0209 log1p -8.1663670046490789e-12 -> -8.1663670046824230e-12
    418 log1p0210 log1p 7.0351735084656292e-18 -> 7.0351735084656292e-18
    419 log1p0211 log1p 5.2732161907375226e-12 -> 5.2732161907236188e-12
    420 log1p0212 log1p 1.0000000000000000e-10 -> 9.9999999995000007e-11
    421 log1p0213 log1p 2.1401273266000197e-9 -> 2.1401273243099470e-9
    422 log1p0214 log1p 1.2668914653979560e-8 -> 1.2668914573728861e-8
    423 log1p0215 log1p 1.6250007816299069e-6 -> 1.6249994613175672e-6
    424 log1p0216 log1p 8.3740495645839399e-6 -> 8.3740145024266269e-6
    425 log1p0217 log1p 3.0000000000000001e-5 -> 2.9999550008999799e-5
    426 log1p0218 log1p 0.0070000000000000001 -> 0.0069756137364252423
    427 log1p0219 log1p 0.013026235315053002 -> 0.012942123564008787
    428 log1p0220 log1p 0.013497160797236184 -> 0.013406885521915038
    429 log1p0221 log1p 0.027625599078135284 -> 0.027250897463483054
    430 log1p0222 log1p 0.14179687245544870 -> 0.13260322540908789
    431 
    432 -- large values
    433 log1p0300 log1p 1.7976931348623157e+308 -> 709.78271289338397
    434 log1p0301 log1p 1.0000000000000001e+300 -> 690.77552789821368
    435 log1p0302 log1p 1.0000000000000001e+70 -> 161.18095650958321
    436 log1p0303 log1p 10000000000.000000 -> 23.025850930040455
    437 
    438 -- other values transferred from testLog1p in test_math
    439 log1p0400 log1p -0.63212055882855767 -> -1.0000000000000000
    440 log1p0401 log1p 1.7182818284590451 -> 1.0000000000000000
    441 log1p0402 log1p 1.0000000000000000 -> 0.69314718055994529
    442 log1p0403 log1p 1.2379400392853803e+27 -> 62.383246250395075
    443 
    444 
    445 -----------------------------------------------------------
    446 -- expm1: exp(x) - 1, without precision loss for small x --
    447 -----------------------------------------------------------
    448 
    449 -- special values
    450 expm10000 expm1 0.0 -> 0.0
    451 expm10001 expm1 -0.0 -> -0.0
    452 expm10002 expm1 inf -> inf
    453 expm10003 expm1 -inf -> -1.0
    454 expm10004 expm1 nan -> nan
    455 
    456 -- expm1(x) ~ x for tiny x
    457 expm10010 expm1 5e-324 -> 5e-324
    458 expm10011 expm1 1e-320 -> 1e-320
    459 expm10012 expm1 1e-300 -> 1e-300
    460 expm10013 expm1 1e-150 -> 1e-150
    461 expm10014 expm1 1e-20 -> 1e-20
    462 
    463 expm10020 expm1 -5e-324 -> -5e-324
    464 expm10021 expm1 -1e-320 -> -1e-320
    465 expm10022 expm1 -1e-300 -> -1e-300
    466 expm10023 expm1 -1e-150 -> -1e-150
    467 expm10024 expm1 -1e-20 -> -1e-20
    468 
    469 -- moderate sized values, where direct evaluation runs into trouble
    470 expm10100 expm1 1e-10 -> 1.0000000000500000e-10
    471 expm10101 expm1 -9.9999999999999995e-08 -> -9.9999995000000163e-8
    472 expm10102 expm1 3.0000000000000001e-05 -> 3.0000450004500034e-5
    473 expm10103 expm1 -0.0070000000000000001 -> -0.0069755570667648951
    474 expm10104 expm1 -0.071499208740094633 -> -0.069002985744820250
    475 expm10105 expm1 -0.063296004180116799 -> -0.061334416373633009
    476 expm10106 expm1 0.02390954035597756 -> 0.024197665143819942
    477 expm10107 expm1 0.085637352649044901 -> 0.089411184580357767
    478 expm10108 expm1 0.5966174947411006 -> 0.81596588596501485
    479 expm10109 expm1 0.30247206212075139 -> 0.35319987035848677
    480 expm10110 expm1 0.74574727375889516 -> 1.1080161116737459
    481 expm10111 expm1 0.97767512926555711 -> 1.6582689207372185
    482 expm10112 expm1 0.8450154566787712 -> 1.3280137976535897
    483 expm10113 expm1 -0.13979260323125264 -> -0.13046144381396060
    484 expm10114 expm1 -0.52899322039643271 -> -0.41080213643695923
    485 expm10115 expm1 -0.74083261478900631 -> -0.52328317124797097
    486 expm10116 expm1 -0.93847766984546055 -> -0.60877704724085946
    487 expm10117 expm1 10.0 -> 22025.465794806718
    488 expm10118 expm1 27.0 -> 532048240600.79865
    489 expm10119 expm1 123 -> 2.6195173187490626e+53
    490 expm10120 expm1 -12.0 -> -0.99999385578764666
    491 expm10121 expm1 -35.100000000000001 -> -0.99999999999999944
    492 
    493 -- extreme negative values
    494 expm10201 expm1 -37.0 -> -0.99999999999999989
    495 expm10200 expm1 -38.0 -> -1.0
    496 expm10210 expm1 -710.0 -> -1.0
    497 -- the formula expm1(x) = 2 * sinh(x/2) * exp(x/2) doesn't work so
    498 -- well when exp(x/2) is subnormal or underflows to zero; check we're
    499 -- not using it!
    500 expm10211 expm1 -1420.0 -> -1.0
    501 expm10212 expm1 -1450.0 -> -1.0
    502 expm10213 expm1 -1500.0 -> -1.0
    503 expm10214 expm1 -1e50 -> -1.0
    504 expm10215 expm1 -1.79e308 -> -1.0
    505 
    506 -- extreme positive values
    507 expm10300 expm1 300 -> 1.9424263952412558e+130
    508 expm10301 expm1 700 -> 1.0142320547350045e+304
    509 -- the next test (expm10302) is disabled because it causes failure on
    510 -- OS X 10.4/Intel: apparently all values over 709.78 produce an
    511 -- overflow on that platform.  See issue #7575.
    512 -- expm10302 expm1 709.78271289328393 -> 1.7976931346824240e+308
    513 expm10303 expm1 709.78271289348402 -> inf overflow
    514 expm10304 expm1 1000 -> inf overflow
    515 expm10305 expm1 1e50 -> inf overflow
    516 expm10306 expm1 1.79e308 -> inf overflow
    517 
    518 -- weaker version of expm10302
    519 expm10307 expm1 709.5 -> 1.3549863193146328e+308
    520 
    521 -------------------------
    522 -- log2: log to base 2 --
    523 -------------------------
    524 
    525 -- special values
    526 log20000 log2 0.0 -> -inf               divide-by-zero
    527 log20001 log2 -0.0 -> -inf              divide-by-zero
    528 log20002 log2 inf -> inf
    529 log20003 log2 -inf -> nan               invalid
    530 log20004 log2 nan -> nan
    531 
    532 -- exact value at 1.0
    533 log20010 log2 1.0 -> 0.0
    534 
    535 -- negatives
    536 log20020 log2 -5e-324 -> nan            invalid
    537 log20021 log2 -1.0 -> nan               invalid
    538 log20022 log2 -1.7e-308 -> nan          invalid
    539 
    540 -- exact values at powers of 2
    541 log20100 log2 2.0 -> 1.0
    542 log20101 log2 4.0 -> 2.0
    543 log20102 log2 8.0 -> 3.0
    544 log20103 log2 16.0 -> 4.0
    545 log20104 log2 32.0 -> 5.0
    546 log20105 log2 64.0 -> 6.0
    547 log20106 log2 128.0 -> 7.0
    548 log20107 log2 256.0 -> 8.0
    549 log20108 log2 512.0 -> 9.0
    550 log20109 log2 1024.0 -> 10.0
    551 log20110 log2 2048.0 -> 11.0
    552 
    553 log20200 log2 0.5 -> -1.0
    554 log20201 log2 0.25 -> -2.0
    555 log20202 log2 0.125 -> -3.0
    556 log20203 log2 0.0625 -> -4.0
    557 
    558 -- values close to 1.0
    559 log20300 log2 1.0000000000000002 -> 3.2034265038149171e-16
    560 log20301 log2 1.0000000001 -> 1.4426951601859516e-10
    561 log20302 log2 1.00001 -> 1.4426878274712997e-5
    562 
    563 log20310 log2 0.9999999999999999 -> -1.6017132519074588e-16
    564 log20311 log2 0.9999999999 -> -1.4426951603302210e-10
    565 log20312 log2 0.99999 -> -1.4427022544056922e-5
    566 
    567 -- tiny values
    568 log20400 log2 5e-324 -> -1074.0
    569 log20401 log2 1e-323 -> -1073.0
    570 log20402 log2 1.5e-323 -> -1072.4150374992789
    571 log20403 log2 2e-323 -> -1072.0
    572 
    573 log20410 log2 1e-308 -> -1023.1538532253076
    574 log20411 log2 2.2250738585072014e-308 -> -1022.0
    575 log20412 log2 4.4501477170144028e-308 -> -1021.0
    576 log20413 log2 1e-307 -> -1019.8319251304202
    577 
    578 -- huge values
    579 log20500 log2 1.7976931348623157e+308 -> 1024.0
    580 log20501 log2 1.7e+308 -> 1023.9193879716706
    581 log20502 log2 8.9884656743115795e+307 -> 1023.0
    582 
    583 -- selection of random values
    584 log20600 log2 -7.2174324841039838e+289 -> nan   invalid
    585 log20601 log2 -2.861319734089617e+265 -> nan    invalid
    586 log20602 log2 -4.3507646894008962e+257 -> nan   invalid
    587 log20603 log2 -6.6717265307520224e+234 -> nan   invalid
    588 log20604 log2 -3.9118023786619294e+229 -> nan   invalid
    589 log20605 log2 -1.5478221302505161e+206 -> nan   invalid
    590 log20606 log2 -1.4380485131364602e+200 -> nan   invalid
    591 log20607 log2 -3.7235198730382645e+185 -> nan   invalid
    592 log20608 log2 -1.0472242235095724e+184 -> nan   invalid
    593 log20609 log2 -5.0141781956163884e+160 -> nan   invalid
    594 log20610 log2 -2.1157958031160324e+124 -> nan   invalid
    595 log20611 log2 -7.9677558612567718e+90 -> nan    invalid
    596 log20612 log2 -5.5553906194063732e+45 -> nan    invalid
    597 log20613 log2 -16573900952607.953 -> nan        invalid
    598 log20614 log2 -37198371019.888618 -> nan        invalid
    599 log20615 log2 -6.0727115121422674e-32 -> nan    invalid
    600 log20616 log2 -2.5406841656526057e-38 -> nan    invalid
    601 log20617 log2 -4.9056766703267657e-43 -> nan    invalid
    602 log20618 log2 -2.1646786075228305e-71 -> nan    invalid
    603 log20619 log2 -2.470826790488573e-78 -> nan     invalid
    604 log20620 log2 -3.8661709303489064e-165 -> nan   invalid
    605 log20621 log2 -1.0516496976649986e-182 -> nan   invalid
    606 log20622 log2 -1.5935458614317996e-255 -> nan   invalid
    607 log20623 log2 -2.8750977267336654e-293 -> nan   invalid
    608 log20624 log2 -7.6079466794732585e-296 -> nan   invalid
    609 log20625 log2 3.2073253539988545e-307 -> -1018.1505544209213
    610 log20626 log2 1.674937885472249e-244 -> -809.80634755783126
    611 log20627 log2 1.0911259044931283e-214 -> -710.76679472274213
    612 log20628 log2 2.0275372624809709e-154 -> -510.55719818383272
    613 log20629 log2 7.3926087369631841e-115 -> -379.13564735312292
    614 log20630 log2 1.3480198206342423e-86 -> -285.25497445094436
    615 log20631 log2 8.9927384655719947e-83 -> -272.55127136401637
    616 log20632 log2 3.1452398713597487e-60 -> -197.66251564496875
    617 log20633 log2 7.0706573215457351e-55 -> -179.88420087782217
    618 log20634 log2 3.1258285390731669e-49 -> -161.13023800505653
    619 log20635 log2 8.2253046627829942e-41 -> -133.15898277355879
    620 log20636 log2 7.8691367397519897e+49 -> 165.75068202732419
    621 log20637 log2 2.9920561983925013e+64 -> 214.18453534573757
    622 log20638 log2 4.7827254553946841e+77 -> 258.04629628445673
    623 log20639 log2 3.1903566496481868e+105 -> 350.47616767491166
    624 log20640 log2 5.6195082449502419e+113 -> 377.86831861008250
    625 log20641 log2 9.9625658250651047e+125 -> 418.55752921228753
    626 log20642 log2 2.7358945220961532e+145 -> 483.13158636923413
    627 log20643 log2 2.785842387926931e+174 -> 579.49360214860280
    628 log20644 log2 2.4169172507252751e+193 -> 642.40529039289652
    629 log20645 log2 3.1689091206395632e+205 -> 682.65924573798395
    630 log20646 log2 2.535995592365391e+208 -> 692.30359597460460
    631 log20647 log2 6.2011236566089916e+233 -> 776.64177576730913
    632 log20648 log2 2.1843274820677632e+253 -> 841.57499717289647
    633 log20649 log2 8.7493931063474791e+297 -> 989.74182713073981
    634