mirror of
https://github.com/python/cpython.git
synced 2025-07-24 19:54:21 +00:00

svn+ssh://pythondev@svn.python.org/python/trunk ........ r77116 | mark.dickinson | 2009-12-29 20:51:24 +0000 (Tue, 29 Dec 2009) | 6 lines Issue #7575: An overflow test for math.expm1 was failing on OS X 10.4/Intel, due to a defect in the platform's implementation of expm1. Since the issue is of low severity, and appears to be fixed in OS X 10.5 and 10.6, it doesn't seem worth working around, so I'm just weakening the relevant test so that it passes on 10.4. ........
409 lines
14 KiB
Text
409 lines
14 KiB
Text
-- Testcases for functions in math.
|
|
--
|
|
-- Each line takes the form:
|
|
--
|
|
-- <testid> <function> <input_value> -> <output_value> <flags>
|
|
--
|
|
-- where:
|
|
--
|
|
-- <testid> is a short name identifying the test,
|
|
--
|
|
-- <function> is the function to be tested (exp, cos, asinh, ...),
|
|
--
|
|
-- <input_value> is a string representing a floating-point value
|
|
--
|
|
-- <output_value> is the expected (ideal) output value, again
|
|
-- represented as a string.
|
|
--
|
|
-- <flags> is a list of the floating-point flags required by C99
|
|
--
|
|
-- The possible flags are:
|
|
--
|
|
-- divide-by-zero : raised when a finite input gives a
|
|
-- mathematically infinite result.
|
|
--
|
|
-- overflow : raised when a finite input gives a finite result that
|
|
-- is too large to fit in the usual range of an IEEE 754 double.
|
|
--
|
|
-- invalid : raised for invalid inputs (e.g., sqrt(-1))
|
|
--
|
|
-- ignore-sign : indicates that the sign of the result is
|
|
-- unspecified; e.g., if the result is given as inf,
|
|
-- then both -inf and inf should be accepted as correct.
|
|
--
|
|
-- Flags may appear in any order.
|
|
--
|
|
-- Lines beginning with '--' (like this one) start a comment, and are
|
|
-- ignored. Blank lines, or lines containing only whitespace, are also
|
|
-- ignored.
|
|
|
|
-- Many of the values below were computed with the help of
|
|
-- version 2.4 of the MPFR library for multiple-precision
|
|
-- floating-point computations with correct rounding. All output
|
|
-- values in this file are (modulo yet-to-be-discovered bugs)
|
|
-- correctly rounded, provided that each input and output decimal
|
|
-- floating-point value below is interpreted as a representation of
|
|
-- the corresponding nearest IEEE 754 double-precision value. See the
|
|
-- MPFR homepage at http://www.mpfr.org for more information about the
|
|
-- MPFR project.
|
|
|
|
|
|
-------------------------
|
|
-- erf: error function --
|
|
-------------------------
|
|
|
|
erf0000 erf 0.0 -> 0.0
|
|
erf0001 erf -0.0 -> -0.0
|
|
erf0002 erf inf -> 1.0
|
|
erf0003 erf -inf -> -1.0
|
|
erf0004 erf nan -> nan
|
|
|
|
-- tiny values
|
|
erf0010 erf 1e-308 -> 1.1283791670955125e-308
|
|
erf0011 erf 5e-324 -> 4.9406564584124654e-324
|
|
erf0012 erf 1e-10 -> 1.1283791670955126e-10
|
|
|
|
-- small integers
|
|
erf0020 erf 1 -> 0.84270079294971489
|
|
erf0021 erf 2 -> 0.99532226501895271
|
|
erf0022 erf 3 -> 0.99997790950300136
|
|
erf0023 erf 4 -> 0.99999998458274209
|
|
erf0024 erf 5 -> 0.99999999999846256
|
|
erf0025 erf 6 -> 1.0
|
|
|
|
erf0030 erf -1 -> -0.84270079294971489
|
|
erf0031 erf -2 -> -0.99532226501895271
|
|
erf0032 erf -3 -> -0.99997790950300136
|
|
erf0033 erf -4 -> -0.99999998458274209
|
|
erf0034 erf -5 -> -0.99999999999846256
|
|
erf0035 erf -6 -> -1.0
|
|
|
|
-- huge values should all go to +/-1, depending on sign
|
|
erf0040 erf -40 -> -1.0
|
|
erf0041 erf 1e16 -> 1.0
|
|
erf0042 erf -1e150 -> -1.0
|
|
erf0043 erf 1.7e308 -> 1.0
|
|
|
|
|
|
----------------------------------------
|
|
-- erfc: complementary error function --
|
|
----------------------------------------
|
|
|
|
erfc0000 erfc 0.0 -> 1.0
|
|
erfc0001 erfc -0.0 -> 1.0
|
|
erfc0002 erfc inf -> 0.0
|
|
erfc0003 erfc -inf -> 2.0
|
|
erfc0004 erfc nan -> nan
|
|
|
|
-- tiny values
|
|
erfc0010 erfc 1e-308 -> 1.0
|
|
erfc0011 erfc 5e-324 -> 1.0
|
|
erfc0012 erfc 1e-10 -> 0.99999999988716204
|
|
|
|
-- small integers
|
|
erfc0020 erfc 1 -> 0.15729920705028513
|
|
erfc0021 erfc 2 -> 0.0046777349810472662
|
|
erfc0022 erfc 3 -> 2.2090496998585441e-05
|
|
erfc0023 erfc 4 -> 1.541725790028002e-08
|
|
erfc0024 erfc 5 -> 1.5374597944280349e-12
|
|
erfc0025 erfc 6 -> 2.1519736712498913e-17
|
|
|
|
erfc0030 erfc -1 -> 1.8427007929497148
|
|
erfc0031 erfc -2 -> 1.9953222650189528
|
|
erfc0032 erfc -3 -> 1.9999779095030015
|
|
erfc0033 erfc -4 -> 1.9999999845827421
|
|
erfc0034 erfc -5 -> 1.9999999999984626
|
|
erfc0035 erfc -6 -> 2.0
|
|
|
|
-- as x -> infinity, erfc(x) behaves like exp(-x*x)/x/sqrt(pi)
|
|
erfc0040 erfc 20 -> 5.3958656116079012e-176
|
|
erfc0041 erfc 25 -> 8.3001725711965228e-274
|
|
erfc0042 erfc 27 -> 5.2370464393526292e-319
|
|
erfc0043 erfc 28 -> 0.0
|
|
|
|
-- huge values
|
|
erfc0050 erfc -40 -> 2.0
|
|
erfc0051 erfc 1e16 -> 0.0
|
|
erfc0052 erfc -1e150 -> 2.0
|
|
erfc0053 erfc 1.7e308 -> 0.0
|
|
|
|
|
|
---------------------------------------------------------
|
|
-- lgamma: log of absolute value of the gamma function --
|
|
---------------------------------------------------------
|
|
|
|
-- special values
|
|
lgam0000 lgamma 0.0 -> inf divide-by-zero
|
|
lgam0001 lgamma -0.0 -> inf divide-by-zero
|
|
lgam0002 lgamma inf -> inf
|
|
lgam0003 lgamma -inf -> inf
|
|
lgam0004 lgamma nan -> nan
|
|
|
|
-- negative integers
|
|
lgam0010 lgamma -1 -> inf divide-by-zero
|
|
lgam0011 lgamma -2 -> inf divide-by-zero
|
|
lgam0012 lgamma -1e16 -> inf divide-by-zero
|
|
lgam0013 lgamma -1e300 -> inf divide-by-zero
|
|
lgam0014 lgamma -1.79e308 -> inf divide-by-zero
|
|
|
|
-- small positive integers give factorials
|
|
lgam0020 lgamma 1 -> 0.0
|
|
lgam0021 lgamma 2 -> 0.0
|
|
lgam0022 lgamma 3 -> 0.69314718055994529
|
|
lgam0023 lgamma 4 -> 1.791759469228055
|
|
lgam0024 lgamma 5 -> 3.1780538303479458
|
|
lgam0025 lgamma 6 -> 4.7874917427820458
|
|
|
|
-- half integers
|
|
lgam0030 lgamma 0.5 -> 0.57236494292470008
|
|
lgam0031 lgamma 1.5 -> -0.12078223763524522
|
|
lgam0032 lgamma 2.5 -> 0.28468287047291918
|
|
lgam0033 lgamma 3.5 -> 1.2009736023470743
|
|
lgam0034 lgamma -0.5 -> 1.2655121234846454
|
|
lgam0035 lgamma -1.5 -> 0.86004701537648098
|
|
lgam0036 lgamma -2.5 -> -0.056243716497674054
|
|
lgam0037 lgamma -3.5 -> -1.309006684993042
|
|
|
|
-- values near 0
|
|
lgam0040 lgamma 0.1 -> 2.252712651734206
|
|
lgam0041 lgamma 0.01 -> 4.5994798780420219
|
|
lgam0042 lgamma 1e-8 -> 18.420680738180209
|
|
lgam0043 lgamma 1e-16 -> 36.841361487904734
|
|
lgam0044 lgamma 1e-30 -> 69.077552789821368
|
|
lgam0045 lgamma 1e-160 -> 368.41361487904732
|
|
lgam0046 lgamma 1e-308 -> 709.19620864216608
|
|
lgam0047 lgamma 5.6e-309 -> 709.77602713741896
|
|
lgam0048 lgamma 5.5e-309 -> 709.79404564292167
|
|
lgam0049 lgamma 1e-309 -> 711.49879373516012
|
|
lgam0050 lgamma 1e-323 -> 743.74692474082133
|
|
lgam0051 lgamma 5e-324 -> 744.44007192138122
|
|
lgam0060 lgamma -0.1 -> 2.3689613327287886
|
|
lgam0061 lgamma -0.01 -> 4.6110249927528013
|
|
lgam0062 lgamma -1e-8 -> 18.420680749724522
|
|
lgam0063 lgamma -1e-16 -> 36.841361487904734
|
|
lgam0064 lgamma -1e-30 -> 69.077552789821368
|
|
lgam0065 lgamma -1e-160 -> 368.41361487904732
|
|
lgam0066 lgamma -1e-308 -> 709.19620864216608
|
|
lgam0067 lgamma -5.6e-309 -> 709.77602713741896
|
|
lgam0068 lgamma -5.5e-309 -> 709.79404564292167
|
|
lgam0069 lgamma -1e-309 -> 711.49879373516012
|
|
lgam0070 lgamma -1e-323 -> 743.74692474082133
|
|
lgam0071 lgamma -5e-324 -> 744.44007192138122
|
|
|
|
-- values near negative integers
|
|
lgam0080 lgamma -0.99999999999999989 -> 36.736800569677101
|
|
lgam0081 lgamma -1.0000000000000002 -> 36.043653389117154
|
|
lgam0082 lgamma -1.9999999999999998 -> 35.350506208557213
|
|
lgam0083 lgamma -2.0000000000000004 -> 34.657359027997266
|
|
lgam0084 lgamma -100.00000000000001 -> -331.85460524980607
|
|
lgam0085 lgamma -99.999999999999986 -> -331.85460524980596
|
|
|
|
-- large inputs
|
|
lgam0100 lgamma 170 -> 701.43726380873704
|
|
lgam0101 lgamma 171 -> 706.57306224578736
|
|
lgam0102 lgamma 171.624 -> 709.78077443669895
|
|
lgam0103 lgamma 171.625 -> 709.78591682948365
|
|
lgam0104 lgamma 172 -> 711.71472580228999
|
|
lgam0105 lgamma 2000 -> 13198.923448054265
|
|
lgam0106 lgamma 2.55998332785163e305 -> 1.7976931348623099e+308
|
|
lgam0107 lgamma 2.55998332785164e305 -> inf overflow
|
|
lgam0108 lgamma 1.7e308 -> inf overflow
|
|
|
|
-- inputs for which gamma(x) is tiny
|
|
lgam0120 lgamma -100.5 -> -364.90096830942736
|
|
lgam0121 lgamma -160.5 -> -656.88005261126432
|
|
lgam0122 lgamma -170.5 -> -707.99843314507882
|
|
lgam0123 lgamma -171.5 -> -713.14301641168481
|
|
lgam0124 lgamma -176.5 -> -738.95247590846486
|
|
lgam0125 lgamma -177.5 -> -744.13144651738037
|
|
lgam0126 lgamma -178.5 -> -749.3160351186001
|
|
|
|
lgam0130 lgamma -1000.5 -> -5914.4377011168517
|
|
lgam0131 lgamma -30000.5 -> -279278.6629959144
|
|
lgam0132 lgamma -4503599627370495.5 -> -1.5782258434492883e+17
|
|
|
|
-- results close to 0: positive argument ...
|
|
lgam0150 lgamma 0.99999999999999989 -> 6.4083812134800075e-17
|
|
lgam0151 lgamma 1.0000000000000002 -> -1.2816762426960008e-16
|
|
lgam0152 lgamma 1.9999999999999998 -> -9.3876980655431170e-17
|
|
lgam0153 lgamma 2.0000000000000004 -> 1.8775396131086244e-16
|
|
|
|
-- ... and negative argument
|
|
lgam0160 lgamma -2.7476826467 -> -5.2477408147689136e-11
|
|
lgam0161 lgamma -2.457024738 -> 3.3464637541912932e-10
|
|
|
|
|
|
---------------------------
|
|
-- gamma: Gamma function --
|
|
---------------------------
|
|
|
|
-- special values
|
|
gam0000 gamma 0.0 -> inf divide-by-zero
|
|
gam0001 gamma -0.0 -> -inf divide-by-zero
|
|
gam0002 gamma inf -> inf
|
|
gam0003 gamma -inf -> nan invalid
|
|
gam0004 gamma nan -> nan
|
|
|
|
-- negative integers inputs are invalid
|
|
gam0010 gamma -1 -> nan invalid
|
|
gam0011 gamma -2 -> nan invalid
|
|
gam0012 gamma -1e16 -> nan invalid
|
|
gam0013 gamma -1e300 -> nan invalid
|
|
|
|
-- small positive integers give factorials
|
|
gam0020 gamma 1 -> 1
|
|
gam0021 gamma 2 -> 1
|
|
gam0022 gamma 3 -> 2
|
|
gam0023 gamma 4 -> 6
|
|
gam0024 gamma 5 -> 24
|
|
gam0025 gamma 6 -> 120
|
|
|
|
-- half integers
|
|
gam0030 gamma 0.5 -> 1.7724538509055161
|
|
gam0031 gamma 1.5 -> 0.88622692545275805
|
|
gam0032 gamma 2.5 -> 1.3293403881791370
|
|
gam0033 gamma 3.5 -> 3.3233509704478426
|
|
gam0034 gamma -0.5 -> -3.5449077018110322
|
|
gam0035 gamma -1.5 -> 2.3632718012073548
|
|
gam0036 gamma -2.5 -> -0.94530872048294190
|
|
gam0037 gamma -3.5 -> 0.27008820585226911
|
|
|
|
-- values near 0
|
|
gam0040 gamma 0.1 -> 9.5135076986687306
|
|
gam0041 gamma 0.01 -> 99.432585119150602
|
|
gam0042 gamma 1e-8 -> 99999999.422784343
|
|
gam0043 gamma 1e-16 -> 10000000000000000
|
|
gam0044 gamma 1e-30 -> 9.9999999999999988e+29
|
|
gam0045 gamma 1e-160 -> 1.0000000000000000e+160
|
|
gam0046 gamma 1e-308 -> 1.0000000000000000e+308
|
|
gam0047 gamma 5.6e-309 -> 1.7857142857142848e+308
|
|
gam0048 gamma 5.5e-309 -> inf overflow
|
|
gam0049 gamma 1e-309 -> inf overflow
|
|
gam0050 gamma 1e-323 -> inf overflow
|
|
gam0051 gamma 5e-324 -> inf overflow
|
|
gam0060 gamma -0.1 -> -10.686287021193193
|
|
gam0061 gamma -0.01 -> -100.58719796441078
|
|
gam0062 gamma -1e-8 -> -100000000.57721567
|
|
gam0063 gamma -1e-16 -> -10000000000000000
|
|
gam0064 gamma -1e-30 -> -9.9999999999999988e+29
|
|
gam0065 gamma -1e-160 -> -1.0000000000000000e+160
|
|
gam0066 gamma -1e-308 -> -1.0000000000000000e+308
|
|
gam0067 gamma -5.6e-309 -> -1.7857142857142848e+308
|
|
gam0068 gamma -5.5e-309 -> -inf overflow
|
|
gam0069 gamma -1e-309 -> -inf overflow
|
|
gam0070 gamma -1e-323 -> -inf overflow
|
|
gam0071 gamma -5e-324 -> -inf overflow
|
|
|
|
-- values near negative integers
|
|
gam0080 gamma -0.99999999999999989 -> -9007199254740992.0
|
|
gam0081 gamma -1.0000000000000002 -> 4503599627370495.5
|
|
gam0082 gamma -1.9999999999999998 -> 2251799813685248.5
|
|
gam0083 gamma -2.0000000000000004 -> -1125899906842623.5
|
|
gam0084 gamma -100.00000000000001 -> -7.5400833348831090e-145
|
|
gam0085 gamma -99.999999999999986 -> 7.5400833348840962e-145
|
|
|
|
-- large inputs
|
|
gam0100 gamma 170 -> 4.2690680090047051e+304
|
|
gam0101 gamma 171 -> 7.2574156153079990e+306
|
|
gam0102 gamma 171.624 -> 1.7942117599248104e+308
|
|
gam0103 gamma 171.625 -> inf overflow
|
|
gam0104 gamma 172 -> inf overflow
|
|
gam0105 gamma 2000 -> inf overflow
|
|
gam0106 gamma 1.7e308 -> inf overflow
|
|
|
|
-- inputs for which gamma(x) is tiny
|
|
gam0120 gamma -100.5 -> -3.3536908198076787e-159
|
|
gam0121 gamma -160.5 -> -5.2555464470078293e-286
|
|
gam0122 gamma -170.5 -> -3.3127395215386074e-308
|
|
gam0123 gamma -171.5 -> 1.9316265431711902e-310
|
|
gam0124 gamma -176.5 -> -1.1956388629358166e-321
|
|
gam0125 gamma -177.5 -> 4.9406564584124654e-324
|
|
gam0126 gamma -178.5 -> -0.0
|
|
gam0127 gamma -179.5 -> 0.0
|
|
gam0128 gamma -201.0001 -> 0.0
|
|
gam0129 gamma -202.9999 -> -0.0
|
|
gam0130 gamma -1000.5 -> -0.0
|
|
gam0131 gamma -1000000000.3 -> -0.0
|
|
gam0132 gamma -4503599627370495.5 -> 0.0
|
|
|
|
-- inputs that cause problems for the standard reflection formula,
|
|
-- thanks to loss of accuracy in 1-x
|
|
gam0140 gamma -63.349078729022985 -> 4.1777971677761880e-88
|
|
gam0141 gamma -127.45117632943295 -> 1.1831110896236810e-214
|
|
|
|
|
|
-----------------------------------------------------------
|
|
-- expm1: exp(x) - 1, without precision loss for small x --
|
|
-----------------------------------------------------------
|
|
|
|
-- special values
|
|
expm10000 expm1 0.0 -> 0.0
|
|
expm10001 expm1 -0.0 -> -0.0
|
|
expm10002 expm1 inf -> inf
|
|
expm10003 expm1 -inf -> -1.0
|
|
expm10004 expm1 nan -> nan
|
|
|
|
-- expm1(x) ~ x for tiny x
|
|
expm10010 expm1 5e-324 -> 5e-324
|
|
expm10011 expm1 1e-320 -> 1e-320
|
|
expm10012 expm1 1e-300 -> 1e-300
|
|
expm10013 expm1 1e-150 -> 1e-150
|
|
expm10014 expm1 1e-20 -> 1e-20
|
|
|
|
expm10020 expm1 -5e-324 -> -5e-324
|
|
expm10021 expm1 -1e-320 -> -1e-320
|
|
expm10022 expm1 -1e-300 -> -1e-300
|
|
expm10023 expm1 -1e-150 -> -1e-150
|
|
expm10024 expm1 -1e-20 -> -1e-20
|
|
|
|
-- moderate sized values, where direct evaluation runs into trouble
|
|
expm10100 expm1 1e-10 -> 1.0000000000500000e-10
|
|
expm10101 expm1 -9.9999999999999995e-08 -> -9.9999995000000163e-8
|
|
expm10102 expm1 3.0000000000000001e-05 -> 3.0000450004500034e-5
|
|
expm10103 expm1 -0.0070000000000000001 -> -0.0069755570667648951
|
|
expm10104 expm1 -0.071499208740094633 -> -0.069002985744820250
|
|
expm10105 expm1 -0.063296004180116799 -> -0.061334416373633009
|
|
expm10106 expm1 0.02390954035597756 -> 0.024197665143819942
|
|
expm10107 expm1 0.085637352649044901 -> 0.089411184580357767
|
|
expm10108 expm1 0.5966174947411006 -> 0.81596588596501485
|
|
expm10109 expm1 0.30247206212075139 -> 0.35319987035848677
|
|
expm10110 expm1 0.74574727375889516 -> 1.1080161116737459
|
|
expm10111 expm1 0.97767512926555711 -> 1.6582689207372185
|
|
expm10112 expm1 0.8450154566787712 -> 1.3280137976535897
|
|
expm10113 expm1 -0.13979260323125264 -> -0.13046144381396060
|
|
expm10114 expm1 -0.52899322039643271 -> -0.41080213643695923
|
|
expm10115 expm1 -0.74083261478900631 -> -0.52328317124797097
|
|
expm10116 expm1 -0.93847766984546055 -> -0.60877704724085946
|
|
expm10117 expm1 10.0 -> 22025.465794806718
|
|
expm10118 expm1 27.0 -> 532048240600.79865
|
|
expm10119 expm1 123 -> 2.6195173187490626e+53
|
|
expm10120 expm1 -12.0 -> -0.99999385578764666
|
|
expm10121 expm1 -35.100000000000001 -> -0.99999999999999944
|
|
|
|
-- extreme negative values
|
|
expm10201 expm1 -37.0 -> -0.99999999999999989
|
|
expm10200 expm1 -38.0 -> -1.0
|
|
expm10210 expm1 -710.0 -> -1.0
|
|
-- the formula expm1(x) = 2 * sinh(x/2) * exp(x/2) doesn't work so
|
|
-- well when exp(x/2) is subnormal or underflows to zero; check we're
|
|
-- not using it!
|
|
expm10211 expm1 -1420.0 -> -1.0
|
|
expm10212 expm1 -1450.0 -> -1.0
|
|
expm10213 expm1 -1500.0 -> -1.0
|
|
expm10214 expm1 -1e50 -> -1.0
|
|
expm10215 expm1 -1.79e308 -> -1.0
|
|
|
|
-- extreme positive values
|
|
expm10300 expm1 300 -> 1.9424263952412558e+130
|
|
expm10301 expm1 700 -> 1.0142320547350045e+304
|
|
-- the next test (expm10302) is disabled because it causes failure on
|
|
-- OS X 10.4/Intel: apparently all values over 709.78 produce an
|
|
-- overflow on that platform. See issue #7575.
|
|
-- expm10302 expm1 709.78271289328393 -> 1.7976931346824240e+308
|
|
expm10303 expm1 709.78271289348402 -> inf overflow
|
|
expm10304 expm1 1000 -> inf overflow
|
|
expm10305 expm1 1e50 -> inf overflow
|
|
expm10306 expm1 1.79e308 -> inf overflow
|
|
|
|
-- weaker version of expm10302
|
|
expm10307 expm1 709.5 -> 1.3549863193146328e+308
|