mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
(Contributed by Andrew Gaul.)
This commit is contained in:
parent
ad21945d03
commit
b67ad7e671
4 changed files with 53 additions and 11 deletions
|
@ -73,10 +73,12 @@ Return the hyperbolic cosine of \var{x}.
|
||||||
Return the exponential value \code{e**\var{x}}.
|
Return the exponential value \code{e**\var{x}}.
|
||||||
\end{funcdesc}
|
\end{funcdesc}
|
||||||
|
|
||||||
\begin{funcdesc}{log}{x}
|
\begin{funcdesc}{log}{x\optional{, base}}
|
||||||
Return the natural logarithm of \var{x}.
|
Returns the logarithm of \var{x} to the given \var{base}.
|
||||||
|
If the \var{base} is not specified, returns the natural logarithm of \var{x}.
|
||||||
There is one branch cut, from 0 along the negative real axis to
|
There is one branch cut, from 0 along the negative real axis to
|
||||||
-\infinity, continuous from above.
|
-\infinity, continuous from above.
|
||||||
|
\versionchanged[\var{base} argument added]{2.4}
|
||||||
\end{funcdesc}
|
\end{funcdesc}
|
||||||
|
|
||||||
\begin{funcdesc}{log10}{x}
|
\begin{funcdesc}{log10}{x}
|
||||||
|
|
|
@ -2,8 +2,25 @@
|
||||||
""" Simple test script for cmathmodule.c
|
""" Simple test script for cmathmodule.c
|
||||||
Roger E. Masse
|
Roger E. Masse
|
||||||
"""
|
"""
|
||||||
import cmath
|
import cmath, math
|
||||||
from test.test_support import verbose
|
from test.test_support import verbose, verify, TestFailed
|
||||||
|
|
||||||
|
verify(abs(cmath.log(10) - math.log(10)) < 1e-9)
|
||||||
|
verify(abs(cmath.log(10,2) - math.log(10,2)) < 1e-9)
|
||||||
|
try:
|
||||||
|
cmath.log('a')
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise TestFailed
|
||||||
|
|
||||||
|
try:
|
||||||
|
cmath.log(10, 'a')
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise TestFailed
|
||||||
|
|
||||||
|
|
||||||
testdict = {'acos' : 1.0,
|
testdict = {'acos' : 1.0,
|
||||||
'acosh' : 1.0,
|
'acosh' : 1.0,
|
||||||
|
|
|
@ -336,6 +336,9 @@ Extension modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Bug #823209: cmath.log() now takes an optional base argument so that its
|
||||||
|
API matches math.log().
|
||||||
|
|
||||||
- Bug #957381: distutils bdist_rpm no longer fails on recent RPM versions
|
- Bug #957381: distutils bdist_rpm no longer fails on recent RPM versions
|
||||||
that generate a *-debuginfo.rpm.
|
that generate a *-debuginfo.rpm.
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ static Py_complex c_halfi = {0., 0.5};
|
||||||
static Py_complex c_log(Py_complex);
|
static Py_complex c_log(Py_complex);
|
||||||
static Py_complex c_prodi(Py_complex);
|
static Py_complex c_prodi(Py_complex);
|
||||||
static Py_complex c_sqrt(Py_complex);
|
static Py_complex c_sqrt(Py_complex);
|
||||||
|
static PyObject * math_error(void);
|
||||||
|
|
||||||
|
|
||||||
static Py_complex
|
static Py_complex
|
||||||
|
@ -164,11 +165,6 @@ c_log(Py_complex x)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(c_log_doc,
|
|
||||||
"log(x)\n"
|
|
||||||
"\n"
|
|
||||||
"Return the natural logarithm of x.");
|
|
||||||
|
|
||||||
|
|
||||||
static Py_complex
|
static Py_complex
|
||||||
c_log10(Py_complex x)
|
c_log10(Py_complex x)
|
||||||
|
@ -312,6 +308,31 @@ PyDoc_STRVAR(c_tanh_doc,
|
||||||
"\n"
|
"\n"
|
||||||
"Return the hyperbolic tangent of x.");
|
"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: */
|
/* And now the glue to make them available from Python: */
|
||||||
|
|
||||||
|
@ -358,7 +379,6 @@ FUNC1(cmath_atanh, c_atanh)
|
||||||
FUNC1(cmath_cos, c_cos)
|
FUNC1(cmath_cos, c_cos)
|
||||||
FUNC1(cmath_cosh, c_cosh)
|
FUNC1(cmath_cosh, c_cosh)
|
||||||
FUNC1(cmath_exp, c_exp)
|
FUNC1(cmath_exp, c_exp)
|
||||||
FUNC1(cmath_log, c_log)
|
|
||||||
FUNC1(cmath_log10, c_log10)
|
FUNC1(cmath_log10, c_log10)
|
||||||
FUNC1(cmath_sin, c_sin)
|
FUNC1(cmath_sin, c_sin)
|
||||||
FUNC1(cmath_sinh, c_sinh)
|
FUNC1(cmath_sinh, c_sinh)
|
||||||
|
@ -381,7 +401,7 @@ static PyMethodDef cmath_methods[] = {
|
||||||
{"cos", cmath_cos, METH_VARARGS, c_cos_doc},
|
{"cos", cmath_cos, METH_VARARGS, c_cos_doc},
|
||||||
{"cosh", cmath_cosh, METH_VARARGS, c_cosh_doc},
|
{"cosh", cmath_cosh, METH_VARARGS, c_cosh_doc},
|
||||||
{"exp", cmath_exp, METH_VARARGS, c_exp_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},
|
{"log10", cmath_log10, METH_VARARGS, c_log10_doc},
|
||||||
{"sin", cmath_sin, METH_VARARGS, c_sin_doc},
|
{"sin", cmath_sin, METH_VARARGS, c_sin_doc},
|
||||||
{"sinh", cmath_sinh, METH_VARARGS, c_sinh_doc},
|
{"sinh", cmath_sinh, METH_VARARGS, c_sinh_doc},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue