y5gfunc.expr.expr_utils¶
expr_utils
¶
Attributes:
| Name | Type | Description |
|---|---|---|
math_functions |
str
|
|
math_functions
module-attribute
¶
math_functions: str = '\nfunction fma(var1, var2, var3) {\n return var1 * var2 + var3\n}\n\nfunction copysign(val, sign) {\n return (sign < 0) ? -abs(val) : abs(val)\n}\n\n# https://stackoverflow.com/a/23097989\nfunction atan(var) {\n zz = abs(var)\n aa = (zz > 1) ? (1 / zz) : zz\n ss = aa ** 2\n qq = ss ** 2\n pp = -2.0258553044340116e-5\n tt = 2.2302240345710764e-4\n pp = fma(pp, qq, -1.1640717779912220e-3)\n tt = fma(tt, qq, 3.8559749383656407e-3)\n pp = fma(pp, qq, -9.1845592187222193e-3)\n tt = fma(tt, qq, 1.6978035834594660e-2)\n pp = fma(pp, qq, -2.5826796814492296e-2)\n tt = fma(tt, qq, 3.4067811082715810e-2)\n pp = fma(pp, qq, -4.0926382420509999e-2)\n tt = fma(tt, qq, 4.6739496199158334e-2)\n pp = fma(pp, qq, -5.2392330054601366e-2)\n tt = fma(tt, qq, 5.8773077721790683e-2)\n pp = fma(pp, qq, -6.6658603633512892e-2)\n tt = fma(tt, qq, 7.6922129305867892e-2)\n pp = fma(pp, ss, tt)\n pp = fma(pp, ss, -9.0909012354005267e-2)\n pp = fma(pp, ss, 1.1111110678749421e-1)\n pp = fma(pp, ss, -1.4285714271334810e-1)\n pp = fma(pp, ss, 1.9999999999755005e-1)\n pp = fma(pp, ss, -3.3333333333331838e-1)\n pp = fma(pp * ss, aa, aa)\n rr = (zz > 1) ? fma(0.93282184640716537, 1.6839188885261840, -pp): pp\n return copysign(rr, var)\n}\n\nfunction atan2(var_y, var_x) {\n theta = 0\n theta = (var_x > 0) ? atan(var_y / var_x) : theta\n theta = (var_x < 0) ? (atan(var_y / var_x) + copysign($pi, var_y)) : theta\n theta = ((var_x == 0) && var_y) ? (copysign($pi / 2, var_y)) : theta\n theta = ((var_x == 0) && (var_y == 0)) ? 0 : theta\n theta = (var_x == 0) ? copysign($pi / 2, var_y) : theta\n return theta\n}\n\nfunction tan(var) {\n return sin(var) / cos(var)\n}\n\nfunction cot(var) {\n return cos(var) / sin(var)\n}\n\nfunction sec(var) {\n return 1 / cos(var)\n}\n\nfunction csc(var) {\n return 1 / sin(var)\n}\n\nfunction asin(var) {\n return 2 * atan(var / (1 + sqrt(1 - var ** 2)))\n}\n\nfunction acos(var) {\n return 2 * atan(sqrt((1 - var) / (1 + var)))\n}\n\nfunction acot(var) {\n return $pi / 2 - atan(var)\n}\n\nfunction sinh(var) {\n return (exp(var) - exp(-var)) / 2\n}\n\nfunction cosh(var) {\n return (exp(var) + exp(-var)) / 2\n}\n\nfunction tanh(var) {\n return (exp(2 * var) - 1) / (exp(2 * var) + 1)\n}\n\nfunction coth(var) {\n return (exp(2 * var) + 1) / (exp(2 * var) - 1)\n}\n\nfunction sech(var) {\n return 1 / cosh(var)\n}\n\nfunction csch(var) {\n return 1 / sinh(var)\n}\n\nfunction arsinh(var) {\n return log(var + sqrt(var ** 2 + 1))\n}\n\nfunction arcosh(var) {\n return log(var + sqrt(var ** 2 - 1))\n}\n\nfunction artanh(var) {\n return 0.5 * log((1 + var) / (1 - var))\n}\n\nfunction arcoth(var) {\n return 0.5 * log((var + 1) / (var - 1))\n}\n\nfunction arsech(var) {\n return log((1 + sqrt(1 - var ** 2)) / var)\n}\n\nfunction arcsch(var) {\n return log(1 / var + sqrt(1 / (var ** 2) + 1))\n}\n\n# https://stackoverflow.com/a/77465269\nfunction cbrt(var) {\n abs_var = abs(var)\n est = abs_var ? exp(log(abs_var) / 3) : var\n est = copysign(est, var)\n cube = est ** 3 \n return abs_var ? fma(-est, ((cube - var) / (2 * cube + var)), est) : var\n}\n\n# https://github.com/kravietz/nist-sts/blob/master/erf.c\nfunction erf(var) {\n abs_var = abs(var)\n tt = 1 / (1 + 0.3275911 * abs_var)\n yy = 1 - (((((1.061405429 * tt + -1.453152027) * tt) + 1.421413741) * tt + -0.284496736) * tt + 0.254829592) * tt * exp(-abs_var * abs_var)\n return copysign(yy, var)\n}\n\n# https://github.com/kravietz/nist-sts/blob/master/erf.c\nfunction erfc(var) {\n\tzz = abs(var)\n\ttt = 1 / (1 + 0.5 * zz)\n\tans = tt * exp(-zz * zz - 1.26551223 + tt * (1.00002368 + tt * (0.37409196 + tt * (0.09678418 + tt * (-0.18628806 + tt * (0.27886807 + tt * (-1.13520398 + tt * (1.48851587 + tt * (-0.82215223 + tt * 0.17087277)))))))))\n\treturn var >= 0 ? ans : 2 - ans\n}\n'