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 -8.85761317469186 \cdot 10^{-305}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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(-x.re\right)\right)\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) - \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 r988814 = x_re;
double r988815 = r988814 * r988814;
double r988816 = x_im;
double r988817 = r988816 * r988816;
double r988818 = r988815 + r988817;
double r988819 = sqrt(r988818);
double r988820 = log(r988819);
double r988821 = y_re;
double r988822 = r988820 * r988821;
double r988823 = atan2(r988816, r988814);
double r988824 = y_im;
double r988825 = r988823 * r988824;
double r988826 = r988822 - r988825;
double r988827 = exp(r988826);
double r988828 = r988820 * r988824;
double r988829 = r988823 * r988821;
double r988830 = r988828 + r988829;
double r988831 = sin(r988830);
double r988832 = r988827 * r988831;
return r988832;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r988833 = x_re;
double r988834 = -8.85761317469186e-305;
bool r988835 = r988833 <= r988834;
double r988836 = y_re;
double r988837 = r988833 * r988833;
double r988838 = x_im;
double r988839 = r988838 * r988838;
double r988840 = r988837 + r988839;
double r988841 = sqrt(r988840);
double r988842 = log(r988841);
double r988843 = r988836 * r988842;
double r988844 = atan2(r988838, r988833);
double r988845 = y_im;
double r988846 = r988844 * r988845;
double r988847 = r988843 - r988846;
double r988848 = exp(r988847);
double r988849 = r988844 * r988836;
double r988850 = -r988833;
double r988851 = log(r988850);
double r988852 = r988845 * r988851;
double r988853 = r988849 + r988852;
double r988854 = sin(r988853);
double r988855 = r988848 * r988854;
double r988856 = log(r988833);
double r988857 = r988845 * r988856;
double r988858 = r988849 + r988857;
double r988859 = sin(r988858);
double r988860 = r988848 * r988859;
double r988861 = r988835 ? r988855 : r988860;
return r988861;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -8.85761317469186e-305Initial program 32.3
Taylor expanded around -inf 20.9
Simplified20.9
if -8.85761317469186e-305 < x.re Initial program 34.1
Taylor expanded around inf 23.8
Simplified23.8
Final simplification22.4
herbie shell --seed 2019149
(FPCore (x.re x.im y.re y.im)
:name "powComplex, imaginary part"
(* (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)))))