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.513594080819617 \cdot 10^{-310}:\\
\;\;\;\;e^{-\left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im + y.re \cdot \log \left(\frac{-1}{x.re}\right)\right)} \cdot 1\\
\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 r14053 = x_re;
double r14054 = r14053 * r14053;
double r14055 = x_im;
double r14056 = r14055 * r14055;
double r14057 = r14054 + r14056;
double r14058 = sqrt(r14057);
double r14059 = log(r14058);
double r14060 = y_re;
double r14061 = r14059 * r14060;
double r14062 = atan2(r14055, r14053);
double r14063 = y_im;
double r14064 = r14062 * r14063;
double r14065 = r14061 - r14064;
double r14066 = exp(r14065);
double r14067 = r14059 * r14063;
double r14068 = r14062 * r14060;
double r14069 = r14067 + r14068;
double r14070 = cos(r14069);
double r14071 = r14066 * r14070;
return r14071;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r14072 = x_re;
double r14073 = -4.5135940808196e-310;
bool r14074 = r14072 <= r14073;
double r14075 = x_im;
double r14076 = atan2(r14075, r14072);
double r14077 = y_im;
double r14078 = r14076 * r14077;
double r14079 = y_re;
double r14080 = -1.0;
double r14081 = r14080 / r14072;
double r14082 = log(r14081);
double r14083 = r14079 * r14082;
double r14084 = r14078 + r14083;
double r14085 = -r14084;
double r14086 = exp(r14085);
double r14087 = 1.0;
double r14088 = r14086 * r14087;
double r14089 = log(r14072);
double r14090 = r14089 * r14079;
double r14091 = r14090 - r14078;
double r14092 = exp(r14091);
double r14093 = r14092 * r14087;
double r14094 = r14074 ? r14088 : r14093;
return r14094;
}



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.5135940808196e-310Initial program 31.0
Taylor expanded around 0 17.5
Taylor expanded around -inf 5.9
if -4.5135940808196e-310 < x.re Initial program 35.2
Taylor expanded around 0 21.9
Taylor expanded around inf 12.1
Final simplification9.2
herbie shell --seed 2020083
(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)))))