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 -6.9564220004280769 \cdot 10^{-25}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\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{elif}\;x.re \le -5.5143999901026958 \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 \left(\frac{1}{x.re}\right)\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r16768 = x_re;
double r16769 = r16768 * r16768;
double r16770 = x_im;
double r16771 = r16770 * r16770;
double r16772 = r16769 + r16771;
double r16773 = sqrt(r16772);
double r16774 = log(r16773);
double r16775 = y_re;
double r16776 = r16774 * r16775;
double r16777 = atan2(r16770, r16768);
double r16778 = y_im;
double r16779 = r16777 * r16778;
double r16780 = r16776 - r16779;
double r16781 = exp(r16780);
double r16782 = r16774 * r16778;
double r16783 = r16777 * r16775;
double r16784 = r16782 + r16783;
double r16785 = sin(r16784);
double r16786 = r16781 * r16785;
return r16786;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16787 = x_re;
double r16788 = -6.956422000428077e-25;
bool r16789 = r16787 <= r16788;
double r16790 = -1.0;
double r16791 = r16790 * r16787;
double r16792 = log(r16791);
double r16793 = y_re;
double r16794 = r16792 * r16793;
double r16795 = x_im;
double r16796 = atan2(r16795, r16787);
double r16797 = y_im;
double r16798 = r16796 * r16797;
double r16799 = r16794 - r16798;
double r16800 = exp(r16799);
double r16801 = r16796 * r16793;
double r16802 = r16790 / r16787;
double r16803 = log(r16802);
double r16804 = r16797 * r16803;
double r16805 = r16801 - r16804;
double r16806 = sin(r16805);
double r16807 = r16800 * r16806;
double r16808 = -5.514399990102696e-309;
bool r16809 = r16787 <= r16808;
double r16810 = r16787 * r16787;
double r16811 = r16795 * r16795;
double r16812 = r16810 + r16811;
double r16813 = sqrt(r16812);
double r16814 = log(r16813);
double r16815 = r16814 * r16793;
double r16816 = r16815 - r16798;
double r16817 = exp(r16816);
double r16818 = r16817 * r16806;
double r16819 = 1.0;
double r16820 = r16819 / r16787;
double r16821 = log(r16820);
double r16822 = r16797 * r16821;
double r16823 = r16801 - r16822;
double r16824 = sin(r16823);
double r16825 = r16817 * r16824;
double r16826 = r16809 ? r16818 : r16825;
double r16827 = r16789 ? r16807 : r16826;
return r16827;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -6.956422000428077e-25Initial program 38.3
Taylor expanded around -inf 21.8
Taylor expanded around -inf 4.3
if -6.956422000428077e-25 < x.re < -5.514399990102696e-309Initial program 24.3
Taylor expanded around -inf 18.2
if -5.514399990102696e-309 < x.re Initial program 35.5
Taylor expanded around inf 24.3
Final simplification17.6
herbie shell --seed 2020046
(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)))))