1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2 * gmpy2_math.h * 3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4 * Python interface to the GMP or MPIR, MPFR, and MPC multiple precision * 5 * libraries. * 6 * * 7 * Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 8 * 2008, 2009 Alex Martelli * 9 * * 10 * Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014, * 11 * 2015, 2016, 2017, 2018, 2019, 2020 Case Van Horsen * 12 * * 13 * This file is part of GMPY2. * 14 * * 15 * GMPY2 is free software: you can redistribute it and/or modify it under * 16 * the terms of the GNU Lesser General Public License as published by the * 17 * Free Software Foundation, either version 3 of the License, or (at your * 18 * option) any later version. * 19 * * 20 * GMPY2 is distributed in the hope that it will be useful, but WITHOUT * 21 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * 22 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * 23 * License for more details. * 24 * * 25 * You should have received a copy of the GNU Lesser General Public * 26 * License along with GMPY2; if not, see <http://www.gnu.org/licenses/> * 27 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 28 29 #ifndef GMPY_MATH_H 30 #define GMPY_MATH_H 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 static PyObject * GMPy_Real_Sin(PyObject *x, CTXT_Object *context); 37 static PyObject * GMPy_Complex_Sin(PyObject *x, CTXT_Object *context); 38 static PyObject * GMPy_Number_Sin(PyObject *x, CTXT_Object *context); 39 static PyObject * GMPy_Context_Sin(PyObject *self, PyObject *other); 40 41 static PyObject * GMPy_Real_Cos(PyObject *x, CTXT_Object *context); 42 static PyObject * GMPy_Complex_Cos(PyObject *x, CTXT_Object *context); 43 static PyObject * GMPy_Number_Cos(PyObject *x, CTXT_Object *context); 44 static PyObject * GMPy_Context_Cos(PyObject *self, PyObject *other); 45 46 static PyObject * GMPy_Real_Tan(PyObject *x, CTXT_Object *context); 47 static PyObject * GMPy_Complex_Tan(PyObject *x, CTXT_Object *context); 48 static PyObject * GMPy_Number_Tan(PyObject *x, CTXT_Object *context); 49 static PyObject * GMPy_Context_Tan(PyObject *self, PyObject *other); 50 51 static PyObject * GMPy_Real_Atan(PyObject *x, CTXT_Object *context); 52 static PyObject * GMPy_Complex_Atan(PyObject *x, CTXT_Object *context); 53 static PyObject * GMPy_Number_Atan(PyObject *x, CTXT_Object *context); 54 static PyObject * GMPy_Context_Atan(PyObject *self, PyObject *other); 55 56 static PyObject * GMPy_Real_Sinh(PyObject *x, CTXT_Object *context); 57 static PyObject * GMPy_Complex_Sinh(PyObject *x, CTXT_Object *context); 58 static PyObject * GMPy_Number_Sinh(PyObject *x, CTXT_Object *context); 59 static PyObject * GMPy_Context_Sinh(PyObject *self, PyObject *other); 60 61 static PyObject * GMPy_Real_Cosh(PyObject *x, CTXT_Object *context); 62 static PyObject * GMPy_Complex_Cosh(PyObject *x, CTXT_Object *context); 63 static PyObject * GMPy_Number_Cosh(PyObject *x, CTXT_Object *context); 64 static PyObject * GMPy_Context_Cosh(PyObject *self, PyObject *other); 65 66 static PyObject * GMPy_Real_Tanh(PyObject *x, CTXT_Object *context); 67 static PyObject * GMPy_Complex_Tanh(PyObject *x, CTXT_Object *context); 68 static PyObject * GMPy_Number_Tanh(PyObject *x, CTXT_Object *context); 69 static PyObject * GMPy_Context_Tanh(PyObject *self, PyObject *other); 70 71 static PyObject * GMPy_Real_Asinh(PyObject *x, CTXT_Object *context); 72 static PyObject * GMPy_Complex_Asinh(PyObject *x, CTXT_Object *context); 73 static PyObject * GMPy_Number_Asinh(PyObject *x, CTXT_Object *context); 74 static PyObject * GMPy_Context_Asinh(PyObject *self, PyObject *other); 75 76 static PyObject * GMPy_Real_Acosh(PyObject *x, CTXT_Object *context); 77 static PyObject * GMPy_Complex_Acosh(PyObject *x, CTXT_Object *context); 78 static PyObject * GMPy_Number_Acosh(PyObject *x, CTXT_Object *context); 79 static PyObject * GMPy_Context_Acosh(PyObject *self, PyObject *other); 80 81 static PyObject * GMPy_Real_Sec(PyObject *x, CTXT_Object *context); 82 static PyObject * GMPy_Number_Sec(PyObject *x, CTXT_Object *context); 83 static PyObject * GMPy_Context_Sec(PyObject *self, PyObject *other); 84 85 static PyObject * GMPy_Real_Csc(PyObject *x, CTXT_Object *context); 86 static PyObject * GMPy_Number_Csc(PyObject *x, CTXT_Object *context); 87 static PyObject * GMPy_Context_Csc(PyObject *self, PyObject *other); 88 89 static PyObject * GMPy_Real_Cot(PyObject *x, CTXT_Object *context); 90 static PyObject * GMPy_Number_Cot(PyObject *x, CTXT_Object *context); 91 static PyObject * GMPy_Context_Cot(PyObject *self, PyObject *other); 92 93 static PyObject * GMPy_Real_Sech(PyObject *x, CTXT_Object *context); 94 static PyObject * GMPy_Number_Sech(PyObject *x, CTXT_Object *context); 95 static PyObject * GMPy_Context_Sech(PyObject *self, PyObject *other); 96 97 static PyObject * GMPy_Real_Csch(PyObject *x, CTXT_Object *context); 98 static PyObject * GMPy_Number_Csch(PyObject *x, CTXT_Object *context); 99 static PyObject * GMPy_Context_Csch(PyObject *self, PyObject *other); 100 101 static PyObject * GMPy_Real_Coth(PyObject *x, CTXT_Object *context); 102 static PyObject * GMPy_Number_Coth(PyObject *x, CTXT_Object *context); 103 static PyObject * GMPy_Context_Coth(PyObject *self, PyObject *other); 104 105 static PyObject * GMPy_Real_Acos(PyObject *x, CTXT_Object *context); 106 static PyObject * GMPy_Complex_Acos(PyObject *x, CTXT_Object *context); 107 static PyObject * GMPy_Number_Acos(PyObject *x, CTXT_Object *context); 108 static PyObject * GMPy_Context_Acos(PyObject *self, PyObject *other); 109 110 static PyObject * GMPy_Real_Asin(PyObject *x, CTXT_Object *context); 111 static PyObject * GMPy_Complex_Asin(PyObject *x, CTXT_Object *context); 112 static PyObject * GMPy_Number_Asin(PyObject *x, CTXT_Object *context); 113 static PyObject * GMPy_Context_Asin(PyObject *self, PyObject *other); 114 115 static PyObject * GMPy_Real_Atanh(PyObject *x, CTXT_Object *context); 116 static PyObject * GMPy_Complex_Atanh(PyObject *x, CTXT_Object *context); 117 static PyObject * GMPy_Number_Atanh(PyObject *x, CTXT_Object *context); 118 static PyObject * GMPy_Context_Atanh(PyObject *self, PyObject *other); 119 120 static PyObject * GMPy_Real_Sin_Cos(PyObject *x, CTXT_Object *context); 121 static PyObject * GMPy_Complex_Sin_Cos(PyObject *x, CTXT_Object *context); 122 static PyObject * GMPy_Number_Sin_Cos(PyObject *x, CTXT_Object *context); 123 static PyObject * GMPy_Context_Sin_Cos(PyObject *self, PyObject *other); 124 125 static PyObject * GMPy_Real_Sinh_Cosh(PyObject *x, CTXT_Object *context); 126 static PyObject * GMPy_Number_Sinh_Cosh(PyObject *x, CTXT_Object *context); 127 static PyObject * GMPy_Context_Sinh_Cosh(PyObject *self, PyObject *other); 128 129 static PyObject * GMPy_Real_Atan2(PyObject *x, PyObject *y, CTXT_Object *context); 130 static PyObject * GMPy_Number_Atan2(PyObject *x, PyObject *y, CTXT_Object *context); 131 static PyObject * GMPy_Context_Atan2(PyObject *self, PyObject *args); 132 133 static PyObject * GMPy_Real_Hypot(PyObject *x, PyObject *y, CTXT_Object *context); 134 static PyObject * GMPy_Number_Hypot(PyObject *x, PyObject *y, CTXT_Object *context); 135 static PyObject * GMPy_Context_Hypot(PyObject *self, PyObject *args); 136 137 static PyObject * GMPy_Context_Degrees(PyObject *self, PyObject *other); 138 static PyObject * GMPy_Context_Radians(PyObject *self, PyObject *other); 139 140 static PyObject * GMPy_Real_Log(PyObject *x, CTXT_Object *context); 141 static PyObject * GMPy_Complex_Log(PyObject *x, CTXT_Object *context); 142 static PyObject * GMPy_Number_Log(PyObject *x, CTXT_Object *context); 143 static PyObject * GMPy_Context_Log(PyObject *self, PyObject *other); 144 145 static PyObject * GMPy_Real_Log10(PyObject *x, CTXT_Object *context); 146 static PyObject * GMPy_Complex_Log10(PyObject *x, CTXT_Object *context); 147 static PyObject * GMPy_Number_Log10(PyObject *x, CTXT_Object *context); 148 static PyObject * GMPy_Context_Log10(PyObject *self, PyObject *other); 149 150 static PyObject * GMPy_Real_Exp(PyObject *x, CTXT_Object *context); 151 static PyObject * GMPy_Complex_Exp(PyObject *x, CTXT_Object *context); 152 static PyObject * GMPy_Number_Exp(PyObject *x, CTXT_Object *context); 153 static PyObject * GMPy_Context_Exp(PyObject *self, PyObject *other); 154 155 static PyObject * GMPy_Real_Sqrt(PyObject *x, CTXT_Object *context); 156 static PyObject * GMPy_Complex_Sqrt(PyObject *x, CTXT_Object *context); 157 static PyObject * GMPy_Number_Sqrt(PyObject *x, CTXT_Object *context); 158 static PyObject * GMPy_Context_Sqrt(PyObject *self, PyObject *other); 159 160 static PyObject * GMPy_Real_RecSqrt(PyObject *x, CTXT_Object *context); 161 static PyObject * GMPy_Number_RecSqrt(PyObject *x, CTXT_Object *context); 162 static PyObject * GMPy_Context_RecSqrt(PyObject *self, PyObject *other); 163 164 static PyObject * GMPy_Real_Rint(PyObject *x, CTXT_Object *context); 165 static PyObject * GMPy_Number_Rint(PyObject *x, CTXT_Object *context); 166 static PyObject * GMPy_Context_Rint(PyObject *self, PyObject *other); 167 168 static PyObject * GMPy_Real_RintCeil(PyObject *x, CTXT_Object *context); 169 static PyObject * GMPy_Number_RintCeil(PyObject *x, CTXT_Object *context); 170 static PyObject * GMPy_Context_RintCeil(PyObject *self, PyObject *other); 171 172 static PyObject * GMPy_Real_RintFloor(PyObject *x, CTXT_Object *context); 173 static PyObject * GMPy_Number_RintFloor(PyObject *x, CTXT_Object *context); 174 static PyObject * GMPy_Context_RintFloor(PyObject *self, PyObject *other); 175 176 static PyObject * GMPy_Real_RintRound(PyObject *x, CTXT_Object *context); 177 static PyObject * GMPy_Number_RintRound(PyObject *x, CTXT_Object *context); 178 static PyObject * GMPy_Context_RintRound(PyObject *self, PyObject *other); 179 180 static PyObject * GMPy_Real_RintTrunc(PyObject *x, CTXT_Object *context); 181 static PyObject * GMPy_Number_RintTrunc(PyObject *x, CTXT_Object *context); 182 static PyObject * GMPy_Context_RintTrunc(PyObject *self, PyObject *other); 183 184 static PyObject * GMPy_Real_Frac(PyObject *x, CTXT_Object *context); 185 static PyObject * GMPy_Number_Frac(PyObject *x, CTXT_Object *context); 186 static PyObject * GMPy_Context_Frac(PyObject *self, PyObject *other); 187 188 static PyObject * GMPy_Real_Cbrt(PyObject *x, CTXT_Object *context); 189 static PyObject * GMPy_Number_Cbrt(PyObject *x, CTXT_Object *context); 190 static PyObject * GMPy_Context_Cbrt(PyObject *self, PyObject *other); 191 192 static PyObject * GMPy_Real_Log2(PyObject *x, CTXT_Object *context); 193 static PyObject * GMPy_Number_Log2(PyObject *x, CTXT_Object *context); 194 static PyObject * GMPy_Context_Log2(PyObject *self, PyObject *other); 195 196 static PyObject * GMPy_Real_Exp2(PyObject *x, CTXT_Object *context); 197 static PyObject * GMPy_Number_Exp2(PyObject *x, CTXT_Object *context); 198 static PyObject * GMPy_Context_Exp2(PyObject *self, PyObject *other); 199 200 static PyObject * GMPy_Real_Exp10(PyObject *x, CTXT_Object *context); 201 static PyObject * GMPy_Number_Exp10(PyObject *x, CTXT_Object *context); 202 static PyObject * GMPy_Context_Exp10(PyObject *self, PyObject *other); 203 204 static PyObject * GMPy_Real_Log1p(PyObject *x, CTXT_Object *context); 205 static PyObject * GMPy_Number_Log1p(PyObject *x, CTXT_Object *context); 206 static PyObject * GMPy_Context_Log1p(PyObject *self, PyObject *other); 207 208 static PyObject * GMPy_Real_Expm1(PyObject *x, CTXT_Object *context); 209 static PyObject * GMPy_Number_Expm1(PyObject *x, CTXT_Object *context); 210 static PyObject * GMPy_Context_Expm1(PyObject *self, PyObject *other); 211 212 static PyObject * GMPy_Real_Eint(PyObject *x, CTXT_Object *context); 213 static PyObject * GMPy_Number_Eint(PyObject *x, CTXT_Object *context); 214 static PyObject * GMPy_Context_Eint(PyObject *self, PyObject *other); 215 216 static PyObject * GMPy_Real_Li2(PyObject *x, CTXT_Object *context); 217 static PyObject * GMPy_Number_Li2(PyObject *x, CTXT_Object *context); 218 static PyObject * GMPy_Context_Li2(PyObject *self, PyObject *other); 219 220 static PyObject * GMPy_Real_Lngamma(PyObject *x, CTXT_Object *context); 221 static PyObject * GMPy_Number_Lngamma(PyObject *x, CTXT_Object *context); 222 static PyObject * GMPy_Context_Lngamma(PyObject *self, PyObject *other); 223 224 static PyObject * GMPy_Real_Digamma(PyObject *x, CTXT_Object *context); 225 static PyObject * GMPy_Number_Digamma(PyObject *x, CTXT_Object *context); 226 static PyObject * GMPy_Context_Digamma(PyObject *self, PyObject *other); 227 228 static PyObject * GMPy_Real_Zeta(PyObject *x, CTXT_Object *context); 229 static PyObject * GMPy_Number_Zeta(PyObject *x, CTXT_Object *context); 230 static PyObject * GMPy_Context_Zeta(PyObject *self, PyObject *other); 231 232 static PyObject * GMPy_Real_Erf(PyObject *x, CTXT_Object *context); 233 static PyObject * GMPy_Number_Erf(PyObject *x, CTXT_Object *context); 234 static PyObject * GMPy_Context_Erf(PyObject *self, PyObject *other); 235 236 static PyObject * GMPy_Real_Erfc(PyObject *x, CTXT_Object *context); 237 static PyObject * GMPy_Number_Erfc(PyObject *x, CTXT_Object *context); 238 static PyObject * GMPy_Context_Erfc(PyObject *self, PyObject *other); 239 240 static PyObject * GMPy_Real_J0(PyObject *x, CTXT_Object *context); 241 static PyObject * GMPy_Number_J0(PyObject *x, CTXT_Object *context); 242 static PyObject * GMPy_Context_J0(PyObject *self, PyObject *other); 243 244 static PyObject * GMPy_Real_J1(PyObject *x, CTXT_Object *context); 245 static PyObject * GMPy_Number_J1(PyObject *x, CTXT_Object *context); 246 static PyObject * GMPy_Context_J1(PyObject *self, PyObject *other); 247 248 static PyObject * GMPy_Real_Y0(PyObject *x, CTXT_Object *context); 249 static PyObject * GMPy_Number_Y0(PyObject *x, CTXT_Object *context); 250 static PyObject * GMPy_Context_Y0(PyObject *self, PyObject *other); 251 252 static PyObject * GMPy_Real_Y1(PyObject *x, CTXT_Object *context); 253 static PyObject * GMPy_Number_Y1(PyObject *x, CTXT_Object *context); 254 static PyObject * GMPy_Context_Y1(PyObject *self, PyObject *other); 255 256 static PyObject * GMPy_Real_Ai(PyObject *x, CTXT_Object *context); 257 static PyObject * GMPy_Number_Ai(PyObject *x, CTXT_Object *context); 258 static PyObject * GMPy_Context_Ai(PyObject *self, PyObject *other); 259 260 static PyObject * GMPy_Real_FMA(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context); 261 static PyObject * GMPy_Number_FMA(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context); 262 static PyObject * GMPy_Context_FMA(PyObject *self, PyObject *args); 263 264 static PyObject * GMPy_Real_FMS(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context); 265 static PyObject * GMPy_Number_FMS(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context); 266 static PyObject * GMPy_Context_FMS(PyObject *self, PyObject *args); 267 268 static PyObject * GMPy_Real_Root(PyObject *x, PyObject *y, CTXT_Object *context); 269 static PyObject * GMPy_Number_Root(PyObject *x, PyObject *y, CTXT_Object *context); 270 static PyObject * GMPy_Context_Root(PyObject *self, PyObject *args); 271 272 static PyObject * GMPy_Real_Jn(PyObject *x, PyObject *y, CTXT_Object *context); 273 static PyObject * GMPy_Number_Jn(PyObject *x, PyObject *y, CTXT_Object *context); 274 static PyObject * GMPy_Context_Jn(PyObject *self, PyObject *args); 275 276 static PyObject * GMPy_Real_Yn(PyObject *x, PyObject *y, CTXT_Object *context); 277 static PyObject * GMPy_Number_Yn(PyObject *x, PyObject *y, CTXT_Object *context); 278 static PyObject * GMPy_Context_Yn(PyObject *self, PyObject *args); 279 280 static PyObject * GMPy_Real_AGM(PyObject *x, PyObject *y, CTXT_Object *context); 281 static PyObject * GMPy_Number_AGM(PyObject *x, PyObject *y, CTXT_Object *context); 282 static PyObject * GMPy_Context_AGM(PyObject *self, PyObject *args); 283 284 static PyObject * GMPy_Real_Maxnum(PyObject *x, PyObject *y, CTXT_Object *context); 285 static PyObject * GMPy_Number_Maxnum(PyObject *x, PyObject *y, CTXT_Object *context); 286 static PyObject * GMPy_Context_Maxnum(PyObject *self, PyObject *args); 287 288 static PyObject * GMPy_Real_Minnum(PyObject *x, PyObject *y, CTXT_Object *context); 289 static PyObject * GMPy_Number_Minnum(PyObject *x, PyObject *y, CTXT_Object *context); 290 static PyObject * GMPy_Context_Minnum(PyObject *self, PyObject *args); 291 292 static PyObject * GMPy_Real_Remainder(PyObject *x, PyObject *y, CTXT_Object *context); 293 static PyObject * GMPy_Number_Remainder(PyObject *x, PyObject *y, CTXT_Object *context); 294 static PyObject * GMPy_Context_Remainder(PyObject *self, PyObject *args); 295 296 static PyObject * GMPy_Real_Fmod(PyObject *x, PyObject *y, CTXT_Object *context); 297 static PyObject * GMPy_Number_Fmod(PyObject *x, PyObject *y, CTXT_Object *context); 298 static PyObject * GMPy_Context_Fmod(PyObject *self, PyObject *args); 299 300 static PyObject * GMPy_Real_RelDiff(PyObject *x, PyObject *y, CTXT_Object *context); 301 static PyObject * GMPy_Number_RelDiff(PyObject *x, PyObject *y, CTXT_Object *context); 302 static PyObject * GMPy_Context_RelDiff(PyObject *self, PyObject *args); 303 304 static PyObject * GMPy_Real_Ceil(PyObject *x, CTXT_Object *context); 305 static PyObject * GMPy_Number_Ceil(PyObject *x, CTXT_Object *context); 306 static PyObject * GMPy_MPFR_Method_Ceil(PyObject *self, PyObject *args); 307 static PyObject * GMPy_Context_Ceil(PyObject *self, PyObject *args); 308 309 static PyObject * GMPy_Real_Floor(PyObject *x, CTXT_Object *context); 310 static PyObject * GMPy_Number_Floor(PyObject *x, CTXT_Object *context); 311 static PyObject * GMPy_MPFR_Method_Floor(PyObject *self, PyObject *args); 312 static PyObject * GMPy_Context_Floor(PyObject *self, PyObject *args); 313 314 static PyObject * GMPy_Real_Trunc(PyObject *x, CTXT_Object *context); 315 static PyObject * GMPy_Number_Trunc(PyObject *x, CTXT_Object *context); 316 static PyObject * GMPy_MPFR_Method_Trunc(PyObject *self, PyObject *args); 317 static PyObject * GMPy_Context_Trunc(PyObject *self, PyObject *args); 318 319 static PyObject * GMPy_Real_Round2(PyObject *x, PyObject *y, CTXT_Object *context); 320 static PyObject * GMPy_Number_Round2(PyObject *x, PyObject *y, CTXT_Object *context); 321 static PyObject * GMPy_Context_Round2(PyObject *self, PyObject *args); 322 323 static PyObject * GMPy_Real_RoundAway(PyObject *x, CTXT_Object *context); 324 static PyObject * GMPy_Number_RoundAway(PyObject *x, CTXT_Object *context); 325 static PyObject * GMPy_Context_RoundAway(PyObject *self, PyObject *other); 326 327 static PyObject * GMPy_Real_Modf(PyObject *x, CTXT_Object *context); 328 static PyObject * GMPy_Number_Modf(PyObject *x, CTXT_Object *context); 329 static PyObject * GMPy_Context_Modf(PyObject *self, PyObject *other); 330 331 static PyObject * GMPy_Real_Lgamma(PyObject *x, CTXT_Object *context); 332 static PyObject * GMPy_Number_Lgamma(PyObject *x, CTXT_Object *context); 333 static PyObject * GMPy_Context_Lgamma(PyObject *self, PyObject *other); 334 335 static PyObject * GMPy_Real_RemQuo(PyObject *x, PyObject *y, CTXT_Object *context); 336 static PyObject * GMPy_Number_RemQuo(PyObject *x, PyObject *y, CTXT_Object *context); 337 static PyObject * GMPy_Context_RemQuo(PyObject *self, PyObject *other); 338 339 static PyObject * GMPy_Real_Frexp(PyObject *x, CTXT_Object *context); 340 static PyObject * GMPy_Number_Frexp(PyObject *x, CTXT_Object *context); 341 static PyObject * GMPy_Context_Frexp(PyObject *self, PyObject *other); 342 343 static PyObject * GMPy_Context_NextToward(PyObject *self, PyObject *args); 344 345 static PyObject * GMPy_Context_NextAbove(PyObject *self, PyObject *other); 346 347 static PyObject * GMPy_Context_NextBelow(PyObject *self, PyObject *other); 348 349 static PyObject * GMPy_Context_Factorial(PyObject *self, PyObject *other); 350 351 static PyObject * GMPy_Context_Fsum(PyObject *self, PyObject *other); 352 353 #ifdef __cplusplus 354 } 355 #endif 356 #endif 357