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 3.68045830903155 \cdot 10^{-310}:\\
\;\;\;\;e^{\left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r15560 = x_re;
double r15561 = r15560 * r15560;
double r15562 = x_im;
double r15563 = r15562 * r15562;
double r15564 = r15561 + r15563;
double r15565 = sqrt(r15564);
double r15566 = log(r15565);
double r15567 = y_re;
double r15568 = r15566 * r15567;
double r15569 = atan2(r15562, r15560);
double r15570 = y_im;
double r15571 = r15569 * r15570;
double r15572 = r15568 - r15571;
double r15573 = exp(r15572);
double r15574 = r15566 * r15570;
double r15575 = r15569 * r15567;
double r15576 = r15574 + r15575;
double r15577 = cos(r15576);
double r15578 = r15573 * r15577;
return r15578;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r15579 = x_re;
double r15580 = 3.68045830903155e-310;
bool r15581 = r15579 <= r15580;
double r15582 = y_re;
double r15583 = -1.0;
double r15584 = r15583 / r15579;
double r15585 = log(r15584);
double r15586 = r15582 * r15585;
double r15587 = -r15586;
double r15588 = x_im;
double r15589 = atan2(r15588, r15579);
double r15590 = y_im;
double r15591 = r15589 * r15590;
double r15592 = r15587 - r15591;
double r15593 = exp(r15592);
double r15594 = log(r15579);
double r15595 = r15594 * r15582;
double r15596 = r15595 - r15591;
double r15597 = exp(r15596);
double r15598 = r15581 ? r15593 : r15597;
return r15598;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 3.68045830903155e-310Initial program 32.2
Taylor expanded around 0 17.6
rmApplied add-log-exp33.8
Taylor expanded around -inf 5.9
Simplified5.9
if 3.68045830903155e-310 < x.re Initial program 34.6
Taylor expanded around 0 22.0
Taylor expanded around inf 11.4
Final simplification8.7
herbie shell --seed 2020043
(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)))))