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 \sin \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 -5.369358519689769 \cdot 10^{-309}:\\
\;\;\;\;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 \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re - y.im \cdot \log \left(\frac{-1}{x.re}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;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 \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r17631 = x_re;
double r17632 = r17631 * r17631;
double r17633 = x_im;
double r17634 = r17633 * r17633;
double r17635 = r17632 + r17634;
double r17636 = sqrt(r17635);
double r17637 = log(r17636);
double r17638 = y_re;
double r17639 = r17637 * r17638;
double r17640 = atan2(r17633, r17631);
double r17641 = y_im;
double r17642 = r17640 * r17641;
double r17643 = r17639 - r17642;
double r17644 = exp(r17643);
double r17645 = r17637 * r17641;
double r17646 = r17640 * r17638;
double r17647 = r17645 + r17646;
double r17648 = sin(r17647);
double r17649 = r17644 * r17648;
return r17649;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17650 = x_re;
double r17651 = -5.36935851968977e-309;
bool r17652 = r17650 <= r17651;
double r17653 = r17650 * r17650;
double r17654 = x_im;
double r17655 = r17654 * r17654;
double r17656 = r17653 + r17655;
double r17657 = sqrt(r17656);
double r17658 = log(r17657);
double r17659 = y_re;
double r17660 = r17658 * r17659;
double r17661 = atan2(r17654, r17650);
double r17662 = y_im;
double r17663 = r17661 * r17662;
double r17664 = r17660 - r17663;
double r17665 = exp(r17664);
double r17666 = r17661 * r17659;
double r17667 = -1.0;
double r17668 = r17667 / r17650;
double r17669 = log(r17668);
double r17670 = r17662 * r17669;
double r17671 = r17666 - r17670;
double r17672 = sin(r17671);
double r17673 = r17665 * r17672;
double r17674 = log(r17650);
double r17675 = r17662 * r17674;
double r17676 = r17666 + r17675;
double r17677 = sin(r17676);
double r17678 = r17665 * r17677;
double r17679 = r17652 ? r17673 : r17678;
return r17679;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -5.36935851968977e-309Initial program 31.6
Taylor expanded around -inf 20.0
if -5.36935851968977e-309 < x.re Initial program 34.8
Taylor expanded around inf 24.5
Simplified24.5
Final simplification22.3
herbie shell --seed 2020047
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
:precision binary64
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (sin (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))