static PyObject * complex_divmod(PyComplexObject *v, PyComplexObject *w) { Py_complex div, mod; PyObject *d, *m, *z; if (PyErr_Warn(PyExc_DeprecationWarning, "complex divmod(), // and % are deprecated") < 0) return NULL; errno = 0; div = c_quot(v->cval,w->cval); /* The raw divisor value. */ if (errno == EDOM) { PyErr_SetString(PyExc_ZeroDivisionError, "complex divmod()"); return NULL; } div.real = floor(div.real); /* Use the floor of the real part. */ div.imag = 0.0; mod = c_diff(v->cval, c_prod(w->cval, div)); d = PyComplex_FromCComplex(div); m = PyComplex_FromCComplex(mod); z = PyTuple_Pack(2, d, m); Py_XDECREF(d); Py_XDECREF(m); return z; }
static PyObject * complex_div(PyComplexObject *v, PyComplexObject *w) { Py_complex quot; PyFPE_START_PROTECT("complex_div", return 0) errno = 0; quot = c_quot(v->cval,w->cval); PyFPE_END_PROTECT(quot) if (errno == EDOM) { PyErr_SetString(PyExc_ZeroDivisionError, "complex division"); return NULL; } return PyComplex_FromCComplex(quot); }
static Py_complex c_powi(Py_complex x, long n) { Py_complex cn; if (n > 100 || n < -100) { cn.real = (double) n; cn.imag = 0.; return c_pow(x,cn); } else if (n > 0) return c_powu(x,n); else return c_quot(c_1,c_powu(x,-n)); }
static PyObject * complex_remainder(PyComplexObject *v, PyComplexObject *w) { Py_complex div, mod; errno = 0; div = c_quot(v->cval,w->cval); /* The raw divisor value. */ if (errno == EDOM) { PyErr_SetString(PyExc_ZeroDivisionError, "complex remainder"); return NULL; } div.real = floor(div.real); /* Use the floor of the real part. */ div.imag = 0.0; mod = c_diff(v->cval, c_prod(w->cval, div)); return PyComplex_FromCComplex(mod); }
static PyObject * complex_div(PyObject *v, PyObject *w) { Py_complex quot; Py_complex a, b; TO_COMPLEX(v, a); TO_COMPLEX(w, b); PyFPE_START_PROTECT("complex_div", return 0) errno = 0; quot = c_quot(a, b); PyFPE_END_PROTECT(quot) if (errno == EDOM) { PyErr_SetString(PyExc_ZeroDivisionError, "complex division by zero"); return NULL; } return PyComplex_FromCComplex(quot); }
static PyObject * complex_classic_div(PyComplexObject *v, PyComplexObject *w) { Py_complex quot; if (Py_DivisionWarningFlag >= 2 && PyErr_Warn(PyExc_DeprecationWarning, "classic complex division") < 0) return NULL; PyFPE_START_PROTECT("complex_classic_div", return 0) errno = 0; quot = c_quot(v->cval,w->cval); PyFPE_END_PROTECT(quot) if (errno == EDOM) { PyErr_SetString(PyExc_ZeroDivisionError, "complex division"); return NULL; } return PyComplex_FromCComplex(quot); }
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); }
static PyObject * complex_divmod(PyComplexObject *v, PyComplexObject *w) { Py_complex div, mod; PyObject *d, *m, *z; errno = 0; div = c_quot(v->cval,w->cval); /* The raw divisor value. */ if (errno == EDOM) { PyErr_SetString(PyExc_ZeroDivisionError, "complex divmod()"); return NULL; } div.real = floor(div.real); /* Use the floor of the real part. */ div.imag = 0.0; mod = c_diff(v->cval, c_prod(w->cval, div)); d = PyComplex_FromCComplex(div); m = PyComplex_FromCComplex(mod); z = Py_BuildValue("(OO)", d, m); Py_XDECREF(d); Py_XDECREF(m); return z; }
static PyObject * complex_remainder(PyObject *v, PyObject *w) { Py_complex div, mod; Py_complex a, b; TO_COMPLEX(v, a); TO_COMPLEX(w, b); if (PyErr_Warn(PyExc_DeprecationWarning, "complex divmod(), // and % are deprecated") < 0) return NULL; errno = 0; div = c_quot(a, b); /* The raw divisor value. */ if (errno == EDOM) { PyErr_SetString(PyExc_ZeroDivisionError, "complex remainder"); return NULL; } div.real = floor(div.real); /* Use the floor of the real part. */ div.imag = 0.0; mod = c_diff(a, c_prod(b, div)); return PyComplex_FromCComplex(mod); }
static Py_complex c_atanh(Py_complex x) { return c_prod(c_half,c_log(c_quot(c_sum(c_one,x),c_diff(c_one,x)))); }