Mercurial > cpython-lru_cache-weakref
diff Modules/cmathmodule.c @ 32350:11c31a98dfd6 legacy-trunk
Patch #826074: cmath.log optional base argument, fixes #823209
(Contributed by Andrew Gaul.)
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Mon, 14 Jun 2004 07:40:10 +0000 |
| parents | f66b3a3509c7 |
| children | 1af7f719ed28 |
line wrap: on
line diff
--- a/Modules/cmathmodule.c Mon Jun 14 04:58:42 2004 +0000 +++ b/Modules/cmathmodule.c Mon Jun 14 07:40:10 2004 +0000 @@ -20,6 +20,7 @@ static Py_complex c_log(Py_complex); static Py_complex c_prodi(Py_complex); static Py_complex c_sqrt(Py_complex); +static PyObject * math_error(void); static Py_complex @@ -164,11 +165,6 @@ return r; } -PyDoc_STRVAR(c_log_doc, -"log(x)\n" -"\n" -"Return the natural logarithm of x."); - static Py_complex c_log10(Py_complex x) @@ -312,6 +308,31 @@ "\n" "Return the hyperbolic tangent of x."); +static PyObject * +cmath_log(PyObject *self, PyObject *args) +{ + Py_complex x; + Py_complex y; + + if (!PyArg_ParseTuple(args, "D|D", &x, &y)) + return NULL; + + errno = 0; + PyFPE_START_PROTECT("complex function", return 0) + x = c_log(x); + if (PyTuple_GET_SIZE(args) == 2) + x = c_quot(x, c_log(y)); + PyFPE_END_PROTECT(x) + if (errno != 0) + return math_error(); + Py_ADJUST_ERANGE2(x.real, x.imag); + return PyComplex_FromCComplex(x); +} + +PyDoc_STRVAR(cmath_log_doc, +"log(x[, base]) -> the logarithm of x to the given base.\n\ +If the base not specified, returns the natural logarithm (base e) of x."); + /* And now the glue to make them available from Python: */ @@ -358,7 +379,6 @@ FUNC1(cmath_cos, c_cos) FUNC1(cmath_cosh, c_cosh) FUNC1(cmath_exp, c_exp) -FUNC1(cmath_log, c_log) FUNC1(cmath_log10, c_log10) FUNC1(cmath_sin, c_sin) FUNC1(cmath_sinh, c_sinh) @@ -381,7 +401,7 @@ {"cos", cmath_cos, METH_VARARGS, c_cos_doc}, {"cosh", cmath_cosh, METH_VARARGS, c_cosh_doc}, {"exp", cmath_exp, METH_VARARGS, c_exp_doc}, - {"log", cmath_log, METH_VARARGS, c_log_doc}, + {"log", cmath_log, METH_VARARGS, cmath_log_doc}, {"log10", cmath_log10, METH_VARARGS, c_log10_doc}, {"sin", cmath_sin, METH_VARARGS, c_sin_doc}, {"sinh", cmath_sinh, METH_VARARGS, c_sinh_doc},
