@@ -249,3 +249,73 @@ gam0132 gamma -4503599627370495.5 -> 0.0
249249-- thanks to loss of accuracy in 1-x
250250gam0140 gamma -63.349078729022985 -> 4.1777971677761880e-88
251251gam0141 gamma -127.45117632943295 -> 1.1831110896236810e-214
252+
253+ -----------------------------------------------------------
254+ -- expm1: exp(x) - 1, without precision loss for small x --
255+ -----------------------------------------------------------
256+
257+ -- special values
258+ expm10000 expm1 0.0 -> 0.0
259+ expm10001 expm1 -0.0 -> -0.0
260+ expm10002 expm1 inf -> inf
261+ expm10003 expm1 -inf -> -1.0
262+ expm10004 expm1 nan -> nan
263+
264+ -- expm1(x) ~ x for tiny x
265+ expm10010 expm1 5e-324 -> 5e-324
266+ expm10011 expm1 1e-320 -> 1e-320
267+ expm10012 expm1 1e-300 -> 1e-300
268+ expm10013 expm1 1e-150 -> 1e-150
269+ expm10014 expm1 1e-20 -> 1e-20
270+
271+ expm10020 expm1 -5e-324 -> -5e-324
272+ expm10021 expm1 -1e-320 -> -1e-320
273+ expm10022 expm1 -1e-300 -> -1e-300
274+ expm10023 expm1 -1e-150 -> -1e-150
275+ expm10024 expm1 -1e-20 -> -1e-20
276+
277+ -- moderate sized values, where direct evaluation runs into trouble
278+ expm10100 expm1 1e-10 -> 1.0000000000500000e-10
279+ expm10101 expm1 -9.9999999999999995e-08 -> -9.9999995000000163e-8
280+ expm10102 expm1 3.0000000000000001e-05 -> 3.0000450004500034e-5
281+ expm10103 expm1 -0.0070000000000000001 -> -0.0069755570667648951
282+ expm10104 expm1 -0.071499208740094633 -> -0.069002985744820250
283+ expm10105 expm1 -0.063296004180116799 -> -0.061334416373633009
284+ expm10106 expm1 0.02390954035597756 -> 0.024197665143819942
285+ expm10107 expm1 0.085637352649044901 -> 0.089411184580357767
286+ expm10108 expm1 0.5966174947411006 -> 0.81596588596501485
287+ expm10109 expm1 0.30247206212075139 -> 0.35319987035848677
288+ expm10110 expm1 0.74574727375889516 -> 1.1080161116737459
289+ expm10111 expm1 0.97767512926555711 -> 1.6582689207372185
290+ expm10112 expm1 0.8450154566787712 -> 1.3280137976535897
291+ expm10113 expm1 -0.13979260323125264 -> -0.13046144381396060
292+ expm10114 expm1 -0.52899322039643271 -> -0.41080213643695923
293+ expm10115 expm1 -0.74083261478900631 -> -0.52328317124797097
294+ expm10116 expm1 -0.93847766984546055 -> -0.60877704724085946
295+ expm10117 expm1 10.0 -> 22025.465794806718
296+ expm10118 expm1 27.0 -> 532048240600.79865
297+ expm10119 expm1 123 -> 2.6195173187490626e+53
298+ expm10120 expm1 -12.0 -> -0.99999385578764666
299+ expm10121 expm1 -35.100000000000001 -> -0.99999999999999944
300+
301+ -- extreme negative values
302+ expm10201 expm1 -37.0 -> -0.99999999999999989
303+ expm10200 expm1 -38.0 -> -1.0
304+ expm10210 expm1 -710.0 -> -1.0
305+ -- the formula expm1(x) = 2 * sinh(x/2) * exp(x/2) doesn't work so
306+ -- well when exp(x/2) is subnormal or underflows to zero; check we're
307+ -- not using it!
308+ expm10211 expm1 -1420.0 -> -1.0
309+ expm10212 expm1 -1450.0 -> -1.0
310+ expm10213 expm1 -1500.0 -> -1.0
311+ expm10214 expm1 -1e50 -> -1.0
312+ expm10215 expm1 -1.79e308 -> -1.0
313+
314+ -- extreme positive values
315+ expm10300 expm1 300 -> 1.9424263952412558e+130
316+ expm10301 expm1 700 -> 1.0142320547350045e+304
317+ expm10302 expm1 709.78271289328393 -> 1.7976931346824240e+308
318+ expm10303 expm1 709.78271289348402 -> inf overflow
319+ expm10304 expm1 1000 -> inf overflow
320+ expm10305 expm1 1e50 -> inf overflow
321+ expm10306 expm1 1.79e308 -> inf overflow
0 commit comments