math_testcases.txt 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633
  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. -- Many of the values below were computed with the help of
  40. -- version 2.4 of the MPFR library for multiple-precision
  41. -- floating-point computations with correct rounding. All output
  42. -- values in this file are (modulo yet-to-be-discovered bugs)
  43. -- correctly rounded, provided that each input and output decimal
  44. -- floating-point value below is interpreted as a representation of
  45. -- the corresponding nearest IEEE 754 double-precision value. See the
  46. -- MPFR homepage at http://www.mpfr.org for more information about the
  47. -- MPFR project.
  48. -------------------------
  49. -- erf: error function --
  50. -------------------------
  51. erf0000 erf 0.0 -> 0.0
  52. erf0001 erf -0.0 -> -0.0
  53. erf0002 erf inf -> 1.0
  54. erf0003 erf -inf -> -1.0
  55. erf0004 erf nan -> nan
  56. -- tiny values
  57. erf0010 erf 1e-308 -> 1.1283791670955125e-308
  58. erf0011 erf 5e-324 -> 4.9406564584124654e-324
  59. erf0012 erf 1e-10 -> 1.1283791670955126e-10
  60. -- small integers
  61. erf0020 erf 1 -> 0.84270079294971489
  62. erf0021 erf 2 -> 0.99532226501895271
  63. erf0022 erf 3 -> 0.99997790950300136
  64. erf0023 erf 4 -> 0.99999998458274209
  65. erf0024 erf 5 -> 0.99999999999846256
  66. erf0025 erf 6 -> 1.0
  67. erf0030 erf -1 -> -0.84270079294971489
  68. erf0031 erf -2 -> -0.99532226501895271
  69. erf0032 erf -3 -> -0.99997790950300136
  70. erf0033 erf -4 -> -0.99999998458274209
  71. erf0034 erf -5 -> -0.99999999999846256
  72. erf0035 erf -6 -> -1.0
  73. -- huge values should all go to +/-1, depending on sign
  74. erf0040 erf -40 -> -1.0
  75. erf0041 erf 1e16 -> 1.0
  76. erf0042 erf -1e150 -> -1.0
  77. erf0043 erf 1.7e308 -> 1.0
  78. -- Issue 8986: inputs x with exp(-x*x) near the underflow threshold
  79. -- incorrectly signalled overflow on some platforms.
  80. erf0100 erf 26.2 -> 1.0
  81. erf0101 erf 26.4 -> 1.0
  82. erf0102 erf 26.6 -> 1.0
  83. erf0103 erf 26.8 -> 1.0
  84. erf0104 erf 27.0 -> 1.0
  85. erf0105 erf 27.2 -> 1.0
  86. erf0106 erf 27.4 -> 1.0
  87. erf0107 erf 27.6 -> 1.0
  88. erf0110 erf -26.2 -> -1.0
  89. erf0111 erf -26.4 -> -1.0
  90. erf0112 erf -26.6 -> -1.0
  91. erf0113 erf -26.8 -> -1.0
  92. erf0114 erf -27.0 -> -1.0
  93. erf0115 erf -27.2 -> -1.0
  94. erf0116 erf -27.4 -> -1.0
  95. erf0117 erf -27.6 -> -1.0
  96. ----------------------------------------
  97. -- erfc: complementary error function --
  98. ----------------------------------------
  99. erfc0000 erfc 0.0 -> 1.0
  100. erfc0001 erfc -0.0 -> 1.0
  101. erfc0002 erfc inf -> 0.0
  102. erfc0003 erfc -inf -> 2.0
  103. erfc0004 erfc nan -> nan
  104. -- tiny values
  105. erfc0010 erfc 1e-308 -> 1.0
  106. erfc0011 erfc 5e-324 -> 1.0
  107. erfc0012 erfc 1e-10 -> 0.99999999988716204
  108. -- small integers
  109. erfc0020 erfc 1 -> 0.15729920705028513
  110. erfc0021 erfc 2 -> 0.0046777349810472662
  111. erfc0022 erfc 3 -> 2.2090496998585441e-05
  112. erfc0023 erfc 4 -> 1.541725790028002e-08
  113. erfc0024 erfc 5 -> 1.5374597944280349e-12
  114. erfc0025 erfc 6 -> 2.1519736712498913e-17
  115. erfc0030 erfc -1 -> 1.8427007929497148
  116. erfc0031 erfc -2 -> 1.9953222650189528
  117. erfc0032 erfc -3 -> 1.9999779095030015
  118. erfc0033 erfc -4 -> 1.9999999845827421
  119. erfc0034 erfc -5 -> 1.9999999999984626
  120. erfc0035 erfc -6 -> 2.0
  121. -- as x -> infinity, erfc(x) behaves like exp(-x*x)/x/sqrt(pi)
  122. erfc0040 erfc 20 -> 5.3958656116079012e-176
  123. erfc0041 erfc 25 -> 8.3001725711965228e-274
  124. erfc0042 erfc 27 -> 5.2370464393526292e-319
  125. erfc0043 erfc 28 -> 0.0
  126. -- huge values
  127. erfc0050 erfc -40 -> 2.0
  128. erfc0051 erfc 1e16 -> 0.0
  129. erfc0052 erfc -1e150 -> 2.0
  130. erfc0053 erfc 1.7e308 -> 0.0
  131. -- Issue 8986: inputs x with exp(-x*x) near the underflow threshold
  132. -- incorrectly signalled overflow on some platforms.
  133. erfc0100 erfc 26.2 -> 1.6432507924389461e-300
  134. erfc0101 erfc 26.4 -> 4.4017768588035426e-305
  135. erfc0102 erfc 26.6 -> 1.0885125885442269e-309
  136. erfc0103 erfc 26.8 -> 2.4849621571966629e-314
  137. erfc0104 erfc 27.0 -> 5.2370464393526292e-319
  138. erfc0105 erfc 27.2 -> 9.8813129168249309e-324
  139. erfc0106 erfc 27.4 -> 0.0
  140. erfc0107 erfc 27.6 -> 0.0
  141. erfc0110 erfc -26.2 -> 2.0
  142. erfc0111 erfc -26.4 -> 2.0
  143. erfc0112 erfc -26.6 -> 2.0
  144. erfc0113 erfc -26.8 -> 2.0
  145. erfc0114 erfc -27.0 -> 2.0
  146. erfc0115 erfc -27.2 -> 2.0
  147. erfc0116 erfc -27.4 -> 2.0
  148. erfc0117 erfc -27.6 -> 2.0
  149. ---------------------------------------------------------
  150. -- lgamma: log of absolute value of the gamma function --
  151. ---------------------------------------------------------
  152. -- special values
  153. lgam0000 lgamma 0.0 -> inf divide-by-zero
  154. lgam0001 lgamma -0.0 -> inf divide-by-zero
  155. lgam0002 lgamma inf -> inf
  156. lgam0003 lgamma -inf -> inf
  157. lgam0004 lgamma nan -> nan
  158. -- negative integers
  159. lgam0010 lgamma -1 -> inf divide-by-zero
  160. lgam0011 lgamma -2 -> inf divide-by-zero
  161. lgam0012 lgamma -1e16 -> inf divide-by-zero
  162. lgam0013 lgamma -1e300 -> inf divide-by-zero
  163. lgam0014 lgamma -1.79e308 -> inf divide-by-zero
  164. -- small positive integers give factorials
  165. lgam0020 lgamma 1 -> 0.0
  166. lgam0021 lgamma 2 -> 0.0
  167. lgam0022 lgamma 3 -> 0.69314718055994529
  168. lgam0023 lgamma 4 -> 1.791759469228055
  169. lgam0024 lgamma 5 -> 3.1780538303479458
  170. lgam0025 lgamma 6 -> 4.7874917427820458
  171. -- half integers
  172. lgam0030 lgamma 0.5 -> 0.57236494292470008
  173. lgam0031 lgamma 1.5 -> -0.12078223763524522
  174. lgam0032 lgamma 2.5 -> 0.28468287047291918
  175. lgam0033 lgamma 3.5 -> 1.2009736023470743
  176. lgam0034 lgamma -0.5 -> 1.2655121234846454
  177. lgam0035 lgamma -1.5 -> 0.86004701537648098
  178. lgam0036 lgamma -2.5 -> -0.056243716497674054
  179. lgam0037 lgamma -3.5 -> -1.309006684993042
  180. -- values near 0
  181. lgam0040 lgamma 0.1 -> 2.252712651734206
  182. lgam0041 lgamma 0.01 -> 4.5994798780420219
  183. lgam0042 lgamma 1e-8 -> 18.420680738180209
  184. lgam0043 lgamma 1e-16 -> 36.841361487904734
  185. lgam0044 lgamma 1e-30 -> 69.077552789821368
  186. lgam0045 lgamma 1e-160 -> 368.41361487904732
  187. lgam0046 lgamma 1e-308 -> 709.19620864216608
  188. lgam0047 lgamma 5.6e-309 -> 709.77602713741896
  189. lgam0048 lgamma 5.5e-309 -> 709.79404564292167
  190. lgam0049 lgamma 1e-309 -> 711.49879373516012
  191. lgam0050 lgamma 1e-323 -> 743.74692474082133
  192. lgam0051 lgamma 5e-324 -> 744.44007192138122
  193. lgam0060 lgamma -0.1 -> 2.3689613327287886
  194. lgam0061 lgamma -0.01 -> 4.6110249927528013
  195. lgam0062 lgamma -1e-8 -> 18.420680749724522
  196. lgam0063 lgamma -1e-16 -> 36.841361487904734
  197. lgam0064 lgamma -1e-30 -> 69.077552789821368
  198. lgam0065 lgamma -1e-160 -> 368.41361487904732
  199. lgam0066 lgamma -1e-308 -> 709.19620864216608
  200. lgam0067 lgamma -5.6e-309 -> 709.77602713741896
  201. lgam0068 lgamma -5.5e-309 -> 709.79404564292167
  202. lgam0069 lgamma -1e-309 -> 711.49879373516012
  203. lgam0070 lgamma -1e-323 -> 743.74692474082133
  204. lgam0071 lgamma -5e-324 -> 744.44007192138122
  205. -- values near negative integers
  206. lgam0080 lgamma -0.99999999999999989 -> 36.736800569677101
  207. lgam0081 lgamma -1.0000000000000002 -> 36.043653389117154
  208. lgam0082 lgamma -1.9999999999999998 -> 35.350506208557213
  209. lgam0083 lgamma -2.0000000000000004 -> 34.657359027997266
  210. lgam0084 lgamma -100.00000000000001 -> -331.85460524980607
  211. lgam0085 lgamma -99.999999999999986 -> -331.85460524980596
  212. -- large inputs
  213. lgam0100 lgamma 170 -> 701.43726380873704
  214. lgam0101 lgamma 171 -> 706.57306224578736
  215. lgam0102 lgamma 171.624 -> 709.78077443669895
  216. lgam0103 lgamma 171.625 -> 709.78591682948365
  217. lgam0104 lgamma 172 -> 711.71472580228999
  218. lgam0105 lgamma 2000 -> 13198.923448054265
  219. lgam0106 lgamma 2.55998332785163e305 -> 1.7976931348623099e+308
  220. lgam0107 lgamma 2.55998332785164e305 -> inf overflow
  221. lgam0108 lgamma 1.7e308 -> inf overflow
  222. -- inputs for which gamma(x) is tiny
  223. lgam0120 lgamma -100.5 -> -364.90096830942736
  224. lgam0121 lgamma -160.5 -> -656.88005261126432
  225. lgam0122 lgamma -170.5 -> -707.99843314507882
  226. lgam0123 lgamma -171.5 -> -713.14301641168481
  227. lgam0124 lgamma -176.5 -> -738.95247590846486
  228. lgam0125 lgamma -177.5 -> -744.13144651738037
  229. lgam0126 lgamma -178.5 -> -749.3160351186001
  230. lgam0130 lgamma -1000.5 -> -5914.4377011168517
  231. lgam0131 lgamma -30000.5 -> -279278.6629959144
  232. lgam0132 lgamma -4503599627370495.5 -> -1.5782258434492883e+17
  233. -- results close to 0: positive argument ...
  234. lgam0150 lgamma 0.99999999999999989 -> 6.4083812134800075e-17
  235. lgam0151 lgamma 1.0000000000000002 -> -1.2816762426960008e-16
  236. lgam0152 lgamma 1.9999999999999998 -> -9.3876980655431170e-17
  237. lgam0153 lgamma 2.0000000000000004 -> 1.8775396131086244e-16
  238. -- ... and negative argument
  239. lgam0160 lgamma -2.7476826467 -> -5.2477408147689136e-11
  240. lgam0161 lgamma -2.457024738 -> 3.3464637541912932e-10
  241. ---------------------------
  242. -- gamma: Gamma function --
  243. ---------------------------
  244. -- special values
  245. gam0000 gamma 0.0 -> inf divide-by-zero
  246. gam0001 gamma -0.0 -> -inf divide-by-zero
  247. gam0002 gamma inf -> inf
  248. gam0003 gamma -inf -> nan invalid
  249. gam0004 gamma nan -> nan
  250. -- negative integers inputs are invalid
  251. gam0010 gamma -1 -> nan invalid
  252. gam0011 gamma -2 -> nan invalid
  253. gam0012 gamma -1e16 -> nan invalid
  254. gam0013 gamma -1e300 -> nan invalid
  255. -- small positive integers give factorials
  256. gam0020 gamma 1 -> 1
  257. gam0021 gamma 2 -> 1
  258. gam0022 gamma 3 -> 2
  259. gam0023 gamma 4 -> 6
  260. gam0024 gamma 5 -> 24
  261. gam0025 gamma 6 -> 120
  262. -- half integers
  263. gam0030 gamma 0.5 -> 1.7724538509055161
  264. gam0031 gamma 1.5 -> 0.88622692545275805
  265. gam0032 gamma 2.5 -> 1.3293403881791370
  266. gam0033 gamma 3.5 -> 3.3233509704478426
  267. gam0034 gamma -0.5 -> -3.5449077018110322
  268. gam0035 gamma -1.5 -> 2.3632718012073548
  269. gam0036 gamma -2.5 -> -0.94530872048294190
  270. gam0037 gamma -3.5 -> 0.27008820585226911
  271. -- values near 0
  272. gam0040 gamma 0.1 -> 9.5135076986687306
  273. gam0041 gamma 0.01 -> 99.432585119150602
  274. gam0042 gamma 1e-8 -> 99999999.422784343
  275. gam0043 gamma 1e-16 -> 10000000000000000
  276. gam0044 gamma 1e-30 -> 9.9999999999999988e+29
  277. gam0045 gamma 1e-160 -> 1.0000000000000000e+160
  278. gam0046 gamma 1e-308 -> 1.0000000000000000e+308
  279. gam0047 gamma 5.6e-309 -> 1.7857142857142848e+308
  280. gam0048 gamma 5.5e-309 -> inf overflow
  281. gam0049 gamma 1e-309 -> inf overflow
  282. gam0050 gamma 1e-323 -> inf overflow
  283. gam0051 gamma 5e-324 -> inf overflow
  284. gam0060 gamma -0.1 -> -10.686287021193193
  285. gam0061 gamma -0.01 -> -100.58719796441078
  286. gam0062 gamma -1e-8 -> -100000000.57721567
  287. gam0063 gamma -1e-16 -> -10000000000000000
  288. gam0064 gamma -1e-30 -> -9.9999999999999988e+29
  289. gam0065 gamma -1e-160 -> -1.0000000000000000e+160
  290. gam0066 gamma -1e-308 -> -1.0000000000000000e+308
  291. gam0067 gamma -5.6e-309 -> -1.7857142857142848e+308
  292. gam0068 gamma -5.5e-309 -> -inf overflow
  293. gam0069 gamma -1e-309 -> -inf overflow
  294. gam0070 gamma -1e-323 -> -inf overflow
  295. gam0071 gamma -5e-324 -> -inf overflow
  296. -- values near negative integers
  297. gam0080 gamma -0.99999999999999989 -> -9007199254740992.0
  298. gam0081 gamma -1.0000000000000002 -> 4503599627370495.5
  299. gam0082 gamma -1.9999999999999998 -> 2251799813685248.5
  300. gam0083 gamma -2.0000000000000004 -> -1125899906842623.5
  301. gam0084 gamma -100.00000000000001 -> -7.5400833348831090e-145
  302. gam0085 gamma -99.999999999999986 -> 7.5400833348840962e-145
  303. -- large inputs
  304. gam0100 gamma 170 -> 4.2690680090047051e+304
  305. gam0101 gamma 171 -> 7.2574156153079990e+306
  306. gam0102 gamma 171.624 -> 1.7942117599248104e+308
  307. gam0103 gamma 171.625 -> inf overflow
  308. gam0104 gamma 172 -> inf overflow
  309. gam0105 gamma 2000 -> inf overflow
  310. gam0106 gamma 1.7e308 -> inf overflow
  311. -- inputs for which gamma(x) is tiny
  312. gam0120 gamma -100.5 -> -3.3536908198076787e-159
  313. gam0121 gamma -160.5 -> -5.2555464470078293e-286
  314. gam0122 gamma -170.5 -> -3.3127395215386074e-308
  315. gam0123 gamma -171.5 -> 1.9316265431711902e-310
  316. gam0124 gamma -176.5 -> -1.1956388629358166e-321
  317. gam0125 gamma -177.5 -> 4.9406564584124654e-324
  318. gam0126 gamma -178.5 -> -0.0
  319. gam0127 gamma -179.5 -> 0.0
  320. gam0128 gamma -201.0001 -> 0.0
  321. gam0129 gamma -202.9999 -> -0.0
  322. gam0130 gamma -1000.5 -> -0.0
  323. gam0131 gamma -1000000000.3 -> -0.0
  324. gam0132 gamma -4503599627370495.5 -> 0.0
  325. -- inputs that cause problems for the standard reflection formula,
  326. -- thanks to loss of accuracy in 1-x
  327. gam0140 gamma -63.349078729022985 -> 4.1777971677761880e-88
  328. gam0141 gamma -127.45117632943295 -> 1.1831110896236810e-214
  329. -----------------------------------------------------------
  330. -- log1p: log(1 + x), without precision loss for small x --
  331. -----------------------------------------------------------
  332. -- special values
  333. log1p0000 log1p 0.0 -> 0.0
  334. log1p0001 log1p -0.0 -> -0.0
  335. log1p0002 log1p inf -> inf
  336. log1p0003 log1p -inf -> nan invalid
  337. log1p0004 log1p nan -> nan
  338. -- singularity at -1.0
  339. log1p0010 log1p -1.0 -> -inf divide-by-zero
  340. log1p0011 log1p -0.9999999999999999 -> -36.736800569677101
  341. -- finite values < 1.0 are invalid
  342. log1p0020 log1p -1.0000000000000002 -> nan invalid
  343. log1p0021 log1p -1.1 -> nan invalid
  344. log1p0022 log1p -2.0 -> nan invalid
  345. log1p0023 log1p -1e300 -> nan invalid
  346. -- tiny x: log1p(x) ~ x
  347. log1p0110 log1p 5e-324 -> 5e-324
  348. log1p0111 log1p 1e-320 -> 1e-320
  349. log1p0112 log1p 1e-300 -> 1e-300
  350. log1p0113 log1p 1e-150 -> 1e-150
  351. log1p0114 log1p 1e-20 -> 1e-20
  352. log1p0120 log1p -5e-324 -> -5e-324
  353. log1p0121 log1p -1e-320 -> -1e-320
  354. log1p0122 log1p -1e-300 -> -1e-300
  355. log1p0123 log1p -1e-150 -> -1e-150
  356. log1p0124 log1p -1e-20 -> -1e-20
  357. -- some (mostly) random small and moderate-sized values
  358. log1p0200 log1p -0.89156889782277482 -> -2.2216403106762863
  359. log1p0201 log1p -0.23858496047770464 -> -0.27257668276980057
  360. log1p0202 log1p -0.011641726191307515 -> -0.011710021654495657
  361. log1p0203 log1p -0.0090126398571693817 -> -0.0090534993825007650
  362. log1p0204 log1p -0.00023442805985712781 -> -0.00023445554240995693
  363. log1p0205 log1p -1.5672870980936349e-5 -> -1.5672993801662046e-5
  364. log1p0206 log1p -7.9650013274825295e-6 -> -7.9650330482740401e-6
  365. log1p0207 log1p -2.5202948343227410e-7 -> -2.5202951519170971e-7
  366. log1p0208 log1p -8.2446372820745855e-11 -> -8.2446372824144559e-11
  367. log1p0209 log1p -8.1663670046490789e-12 -> -8.1663670046824230e-12
  368. log1p0210 log1p 7.0351735084656292e-18 -> 7.0351735084656292e-18
  369. log1p0211 log1p 5.2732161907375226e-12 -> 5.2732161907236188e-12
  370. log1p0212 log1p 1.0000000000000000e-10 -> 9.9999999995000007e-11
  371. log1p0213 log1p 2.1401273266000197e-9 -> 2.1401273243099470e-9
  372. log1p0214 log1p 1.2668914653979560e-8 -> 1.2668914573728861e-8
  373. log1p0215 log1p 1.6250007816299069e-6 -> 1.6249994613175672e-6
  374. log1p0216 log1p 8.3740495645839399e-6 -> 8.3740145024266269e-6
  375. log1p0217 log1p 3.0000000000000001e-5 -> 2.9999550008999799e-5
  376. log1p0218 log1p 0.0070000000000000001 -> 0.0069756137364252423
  377. log1p0219 log1p 0.013026235315053002 -> 0.012942123564008787
  378. log1p0220 log1p 0.013497160797236184 -> 0.013406885521915038
  379. log1p0221 log1p 0.027625599078135284 -> 0.027250897463483054
  380. log1p0222 log1p 0.14179687245544870 -> 0.13260322540908789
  381. -- large values
  382. log1p0300 log1p 1.7976931348623157e+308 -> 709.78271289338397
  383. log1p0301 log1p 1.0000000000000001e+300 -> 690.77552789821368
  384. log1p0302 log1p 1.0000000000000001e+70 -> 161.18095650958321
  385. log1p0303 log1p 10000000000.000000 -> 23.025850930040455
  386. -- other values transferred from testLog1p in test_math
  387. log1p0400 log1p -0.63212055882855767 -> -1.0000000000000000
  388. log1p0401 log1p 1.7182818284590451 -> 1.0000000000000000
  389. log1p0402 log1p 1.0000000000000000 -> 0.69314718055994529
  390. log1p0403 log1p 1.2379400392853803e+27 -> 62.383246250395075
  391. -----------------------------------------------------------
  392. -- expm1: exp(x) - 1, without precision loss for small x --
  393. -----------------------------------------------------------
  394. -- special values
  395. expm10000 expm1 0.0 -> 0.0
  396. expm10001 expm1 -0.0 -> -0.0
  397. expm10002 expm1 inf -> inf
  398. expm10003 expm1 -inf -> -1.0
  399. expm10004 expm1 nan -> nan
  400. -- expm1(x) ~ x for tiny x
  401. expm10010 expm1 5e-324 -> 5e-324
  402. expm10011 expm1 1e-320 -> 1e-320
  403. expm10012 expm1 1e-300 -> 1e-300
  404. expm10013 expm1 1e-150 -> 1e-150
  405. expm10014 expm1 1e-20 -> 1e-20
  406. expm10020 expm1 -5e-324 -> -5e-324
  407. expm10021 expm1 -1e-320 -> -1e-320
  408. expm10022 expm1 -1e-300 -> -1e-300
  409. expm10023 expm1 -1e-150 -> -1e-150
  410. expm10024 expm1 -1e-20 -> -1e-20
  411. -- moderate sized values, where direct evaluation runs into trouble
  412. expm10100 expm1 1e-10 -> 1.0000000000500000e-10
  413. expm10101 expm1 -9.9999999999999995e-08 -> -9.9999995000000163e-8
  414. expm10102 expm1 3.0000000000000001e-05 -> 3.0000450004500034e-5
  415. expm10103 expm1 -0.0070000000000000001 -> -0.0069755570667648951
  416. expm10104 expm1 -0.071499208740094633 -> -0.069002985744820250
  417. expm10105 expm1 -0.063296004180116799 -> -0.061334416373633009
  418. expm10106 expm1 0.02390954035597756 -> 0.024197665143819942
  419. expm10107 expm1 0.085637352649044901 -> 0.089411184580357767
  420. expm10108 expm1 0.5966174947411006 -> 0.81596588596501485
  421. expm10109 expm1 0.30247206212075139 -> 0.35319987035848677
  422. expm10110 expm1 0.74574727375889516 -> 1.1080161116737459
  423. expm10111 expm1 0.97767512926555711 -> 1.6582689207372185
  424. expm10112 expm1 0.8450154566787712 -> 1.3280137976535897
  425. expm10113 expm1 -0.13979260323125264 -> -0.13046144381396060
  426. expm10114 expm1 -0.52899322039643271 -> -0.41080213643695923
  427. expm10115 expm1 -0.74083261478900631 -> -0.52328317124797097
  428. expm10116 expm1 -0.93847766984546055 -> -0.60877704724085946
  429. expm10117 expm1 10.0 -> 22025.465794806718
  430. expm10118 expm1 27.0 -> 532048240600.79865
  431. expm10119 expm1 123 -> 2.6195173187490626e+53
  432. expm10120 expm1 -12.0 -> -0.99999385578764666
  433. expm10121 expm1 -35.100000000000001 -> -0.99999999999999944
  434. -- extreme negative values
  435. expm10201 expm1 -37.0 -> -0.99999999999999989
  436. expm10200 expm1 -38.0 -> -1.0
  437. expm10210 expm1 -710.0 -> -1.0
  438. -- the formula expm1(x) = 2 * sinh(x/2) * exp(x/2) doesn't work so
  439. -- well when exp(x/2) is subnormal or underflows to zero; check we're
  440. -- not using it!
  441. expm10211 expm1 -1420.0 -> -1.0
  442. expm10212 expm1 -1450.0 -> -1.0
  443. expm10213 expm1 -1500.0 -> -1.0
  444. expm10214 expm1 -1e50 -> -1.0
  445. expm10215 expm1 -1.79e308 -> -1.0
  446. -- extreme positive values
  447. expm10300 expm1 300 -> 1.9424263952412558e+130
  448. expm10301 expm1 700 -> 1.0142320547350045e+304
  449. -- the next test (expm10302) is disabled because it causes failure on
  450. -- OS X 10.4/Intel: apparently all values over 709.78 produce an
  451. -- overflow on that platform. See issue #7575.
  452. -- expm10302 expm1 709.78271289328393 -> 1.7976931346824240e+308
  453. expm10303 expm1 709.78271289348402 -> inf overflow
  454. expm10304 expm1 1000 -> inf overflow
  455. expm10305 expm1 1e50 -> inf overflow
  456. expm10306 expm1 1.79e308 -> inf overflow
  457. -- weaker version of expm10302
  458. expm10307 expm1 709.5 -> 1.3549863193146328e+308
  459. -------------------------
  460. -- log2: log to base 2 --
  461. -------------------------
  462. -- special values
  463. log20000 log2 0.0 -> -inf divide-by-zero
  464. log20001 log2 -0.0 -> -inf divide-by-zero
  465. log20002 log2 inf -> inf
  466. log20003 log2 -inf -> nan invalid
  467. log20004 log2 nan -> nan
  468. -- exact value at 1.0
  469. log20010 log2 1.0 -> 0.0
  470. -- negatives
  471. log20020 log2 -5e-324 -> nan invalid
  472. log20021 log2 -1.0 -> nan invalid
  473. log20022 log2 -1.7e-308 -> nan invalid
  474. -- exact values at powers of 2
  475. log20100 log2 2.0 -> 1.0
  476. log20101 log2 4.0 -> 2.0
  477. log20102 log2 8.0 -> 3.0
  478. log20103 log2 16.0 -> 4.0
  479. log20104 log2 32.0 -> 5.0
  480. log20105 log2 64.0 -> 6.0
  481. log20106 log2 128.0 -> 7.0
  482. log20107 log2 256.0 -> 8.0
  483. log20108 log2 512.0 -> 9.0
  484. log20109 log2 1024.0 -> 10.0
  485. log20110 log2 2048.0 -> 11.0
  486. log20200 log2 0.5 -> -1.0
  487. log20201 log2 0.25 -> -2.0
  488. log20202 log2 0.125 -> -3.0
  489. log20203 log2 0.0625 -> -4.0
  490. -- values close to 1.0
  491. log20300 log2 1.0000000000000002 -> 3.2034265038149171e-16
  492. log20301 log2 1.0000000001 -> 1.4426951601859516e-10
  493. log20302 log2 1.00001 -> 1.4426878274712997e-5
  494. log20310 log2 0.9999999999999999 -> -1.6017132519074588e-16
  495. log20311 log2 0.9999999999 -> -1.4426951603302210e-10
  496. log20312 log2 0.99999 -> -1.4427022544056922e-5
  497. -- tiny values
  498. log20400 log2 5e-324 -> -1074.0
  499. log20401 log2 1e-323 -> -1073.0
  500. log20402 log2 1.5e-323 -> -1072.4150374992789
  501. log20403 log2 2e-323 -> -1072.0
  502. log20410 log2 1e-308 -> -1023.1538532253076
  503. log20411 log2 2.2250738585072014e-308 -> -1022.0
  504. log20412 log2 4.4501477170144028e-308 -> -1021.0
  505. log20413 log2 1e-307 -> -1019.8319251304202
  506. -- huge values
  507. log20500 log2 1.7976931348623157e+308 -> 1024.0
  508. log20501 log2 1.7e+308 -> 1023.9193879716706
  509. log20502 log2 8.9884656743115795e+307 -> 1023.0
  510. -- selection of random values
  511. log20600 log2 -7.2174324841039838e+289 -> nan invalid
  512. log20601 log2 -2.861319734089617e+265 -> nan invalid
  513. log20602 log2 -4.3507646894008962e+257 -> nan invalid
  514. log20603 log2 -6.6717265307520224e+234 -> nan invalid
  515. log20604 log2 -3.9118023786619294e+229 -> nan invalid
  516. log20605 log2 -1.5478221302505161e+206 -> nan invalid
  517. log20606 log2 -1.4380485131364602e+200 -> nan invalid
  518. log20607 log2 -3.7235198730382645e+185 -> nan invalid
  519. log20608 log2 -1.0472242235095724e+184 -> nan invalid
  520. log20609 log2 -5.0141781956163884e+160 -> nan invalid
  521. log20610 log2 -2.1157958031160324e+124 -> nan invalid
  522. log20611 log2 -7.9677558612567718e+90 -> nan invalid
  523. log20612 log2 -5.5553906194063732e+45 -> nan invalid
  524. log20613 log2 -16573900952607.953 -> nan invalid
  525. log20614 log2 -37198371019.888618 -> nan invalid
  526. log20615 log2 -6.0727115121422674e-32 -> nan invalid
  527. log20616 log2 -2.5406841656526057e-38 -> nan invalid
  528. log20617 log2 -4.9056766703267657e-43 -> nan invalid
  529. log20618 log2 -2.1646786075228305e-71 -> nan invalid
  530. log20619 log2 -2.470826790488573e-78 -> nan invalid
  531. log20620 log2 -3.8661709303489064e-165 -> nan invalid
  532. log20621 log2 -1.0516496976649986e-182 -> nan invalid
  533. log20622 log2 -1.5935458614317996e-255 -> nan invalid
  534. log20623 log2 -2.8750977267336654e-293 -> nan invalid
  535. log20624 log2 -7.6079466794732585e-296 -> nan invalid
  536. log20625 log2 3.2073253539988545e-307 -> -1018.1505544209213
  537. log20626 log2 1.674937885472249e-244 -> -809.80634755783126
  538. log20627 log2 1.0911259044931283e-214 -> -710.76679472274213
  539. log20628 log2 2.0275372624809709e-154 -> -510.55719818383272
  540. log20629 log2 7.3926087369631841e-115 -> -379.13564735312292
  541. log20630 log2 1.3480198206342423e-86 -> -285.25497445094436
  542. log20631 log2 8.9927384655719947e-83 -> -272.55127136401637
  543. log20632 log2 3.1452398713597487e-60 -> -197.66251564496875
  544. log20633 log2 7.0706573215457351e-55 -> -179.88420087782217
  545. log20634 log2 3.1258285390731669e-49 -> -161.13023800505653
  546. log20635 log2 8.2253046627829942e-41 -> -133.15898277355879
  547. log20636 log2 7.8691367397519897e+49 -> 165.75068202732419
  548. log20637 log2 2.9920561983925013e+64 -> 214.18453534573757
  549. log20638 log2 4.7827254553946841e+77 -> 258.04629628445673
  550. log20639 log2 3.1903566496481868e+105 -> 350.47616767491166
  551. log20640 log2 5.6195082449502419e+113 -> 377.86831861008250
  552. log20641 log2 9.9625658250651047e+125 -> 418.55752921228753
  553. log20642 log2 2.7358945220961532e+145 -> 483.13158636923413
  554. log20643 log2 2.785842387926931e+174 -> 579.49360214860280
  555. log20644 log2 2.4169172507252751e+193 -> 642.40529039289652
  556. log20645 log2 3.1689091206395632e+205 -> 682.65924573798395
  557. log20646 log2 2.535995592365391e+208 -> 692.30359597460460
  558. log20647 log2 6.2011236566089916e+233 -> 776.64177576730913
  559. log20648 log2 2.1843274820677632e+253 -> 841.57499717289647
  560. log20649 log2 8.7493931063474791e+297 -> 989.74182713073981