655a656,686
> static PyObject *
> math_expm1(PyObject *self, PyObject *arg)
> {
> double x = PyFloat_AsDouble(arg);
> if (PyErr_Occurred())
> return NULL;
> double k = 2.;
> double s = x;
> double r = x;
> double u0;
> double u1;
> if (fabs(x) < log(2.)) {
> do {
> u0 = x/k*s;
> u1 = x/(k+1)*u0;
> s = u0;
> r += u0;
> k++;
> } while (fabs(u0)>fabs(u1));
> }
> else {
> r = exp(x) -1;
> }
> return PyFloat_FromDouble(r);
>
> }
>
> PyDoc_STRVAR(math_expm1_doc,
> "expm1(x)\n\n\
> Return exp(x) minus 1 for small x");
>
1366a1398
> {"expm1", math_expm1, METH_O, math_expm1_doc},
1408a1441
> PyModule_AddObject(m, "C", PyFloat_FromDouble(Py_MATH_C));