static Py_complex c_powu(Py_complex x, long n) { Py_complex r, p; long mask = 1; r = c_1; p = x; while (mask > 0 && n >= mask) { if (n & mask) r = c_prod(r,p); mask <<= 1; p = c_prod(p,p); } return r; }
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 Py_complex c_asinh(Py_complex x) { Py_complex z; z = c_sqrt(c_half); z = c_log(c_prod(z, c_sum(c_sqrt(c_sum(x, c_i)), c_sqrt(c_diff(x, c_i))))); return c_sum(z, z); }
static PyObject * complex_mul(PyComplexObject *v, PyComplexObject *w) { Py_complex result; PyFPE_START_PROTECT("complex_mul", return 0) result = c_prod(v->cval,w->cval); PyFPE_END_PROTECT(result) return PyComplex_FromCComplex(result); }
static Py_complex c_asin(Py_complex x) { /* -i * log[(sqrt(1-x**2) + i*x] */ const Py_complex squared = c_prod(x, x); const Py_complex sqrt_1_minus_x_sq = c_sqrt(c_diff(c_one, squared)); return c_neg(c_prodi(c_log( c_sum(sqrt_1_minus_x_sq, c_prodi(x)) ) ) ); }
static PyObject * complex_mul(PyObject *v, PyObject *w) { Py_complex result; Py_complex a, b; TO_COMPLEX(v, a); TO_COMPLEX(w, b); PyFPE_START_PROTECT("complex_mul", return 0) result = c_prod(a, b); PyFPE_END_PROTECT(result) return PyComplex_FromCComplex(result); }
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_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)))); }
static Py_complex c_acos(Py_complex x) { return c_neg(c_prodi(c_log(c_sum(x,c_prod(c_i, c_sqrt(c_diff(c_one,c_prod(x,x)))))))); }