e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\begin{array}{l}
\mathbf{if}\;x.re \le -4.933856107603524 \cdot 10^{-310}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 8.89485926940438227 \cdot 10^{-92}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\mathbf{elif}\;x.re \le 4.9079859598248485 \cdot 10^{22}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \left(\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}} \cdot \sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}\right) \cdot \left(\left(\left(\sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}} \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot \sqrt[3]{\sqrt[3]{\tan^{-1}_* \frac{x.im}{x.re}}}\right) \cdot y.im\right)} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r15093 = x_re;
double r15094 = r15093 * r15093;
double r15095 = x_im;
double r15096 = r15095 * r15095;
double r15097 = r15094 + r15096;
double r15098 = sqrt(r15097);
double r15099 = log(r15098);
double r15100 = y_re;
double r15101 = r15099 * r15100;
double r15102 = atan2(r15095, r15093);
double r15103 = y_im;
double r15104 = r15102 * r15103;
double r15105 = r15101 - r15104;
double r15106 = exp(r15105);
double r15107 = r15099 * r15103;
double r15108 = r15102 * r15100;
double r15109 = r15107 + r15108;
double r15110 = cos(r15109);
double r15111 = r15106 * r15110;
return r15111;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r15112 = x_re;
double r15113 = -4.9338561076035e-310;
bool r15114 = r15112 <= r15113;
double r15115 = -1.0;
double r15116 = r15115 * r15112;
double r15117 = log(r15116);
double r15118 = y_re;
double r15119 = r15117 * r15118;
double r15120 = x_im;
double r15121 = atan2(r15120, r15112);
double r15122 = y_im;
double r15123 = r15121 * r15122;
double r15124 = r15119 - r15123;
double r15125 = exp(r15124);
double r15126 = 1.0;
double r15127 = r15125 * r15126;
double r15128 = 8.894859269404382e-92;
bool r15129 = r15112 <= r15128;
double r15130 = log(r15112);
double r15131 = r15130 * r15118;
double r15132 = r15131 - r15123;
double r15133 = exp(r15132);
double r15134 = r15133 * r15126;
double r15135 = 4.9079859598248485e+22;
bool r15136 = r15112 <= r15135;
double r15137 = r15112 * r15112;
double r15138 = r15120 * r15120;
double r15139 = r15137 + r15138;
double r15140 = sqrt(r15139);
double r15141 = log(r15140);
double r15142 = r15141 * r15118;
double r15143 = cbrt(r15121);
double r15144 = r15143 * r15143;
double r15145 = cbrt(r15143);
double r15146 = r15145 * r15145;
double r15147 = r15146 * r15145;
double r15148 = r15147 * r15122;
double r15149 = r15144 * r15148;
double r15150 = r15142 - r15149;
double r15151 = exp(r15150);
double r15152 = r15141 * r15122;
double r15153 = r15121 * r15118;
double r15154 = r15152 + r15153;
double r15155 = cos(r15154);
double r15156 = r15151 * r15155;
double r15157 = r15136 ? r15156 : r15134;
double r15158 = r15129 ? r15134 : r15157;
double r15159 = r15114 ? r15127 : r15158;
return r15159;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.9338561076035e-310Initial program 31.5
Taylor expanded around 0 17.6
Taylor expanded around -inf 5.9
if -4.9338561076035e-310 < x.re < 8.894859269404382e-92 or 4.9079859598248485e+22 < x.re Initial program 38.7
Taylor expanded around 0 23.6
Taylor expanded around inf 12.3
if 8.894859269404382e-92 < x.re < 4.9079859598248485e+22Initial program 20.8
rmApplied add-cube-cbrt20.8
Applied associate-*l*20.8
rmApplied add-cube-cbrt20.8
Final simplification9.9
herbie shell --seed 2020020
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
:precision binary64
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))