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 -1.7421973940893 \cdot 10^{-310}:\\
\;\;\;\;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}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right) \cdot 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}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1125825 = x_re;
double r1125826 = r1125825 * r1125825;
double r1125827 = x_im;
double r1125828 = r1125827 * r1125827;
double r1125829 = r1125826 + r1125828;
double r1125830 = sqrt(r1125829);
double r1125831 = log(r1125830);
double r1125832 = y_re;
double r1125833 = r1125831 * r1125832;
double r1125834 = atan2(r1125827, r1125825);
double r1125835 = y_im;
double r1125836 = r1125834 * r1125835;
double r1125837 = r1125833 - r1125836;
double r1125838 = exp(r1125837);
double r1125839 = r1125831 * r1125835;
double r1125840 = r1125834 * r1125832;
double r1125841 = r1125839 + r1125840;
double r1125842 = sin(r1125841);
double r1125843 = r1125838 * r1125842;
return r1125843;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1125844 = x_re;
double r1125845 = -1.7421973940893e-310;
bool r1125846 = r1125844 <= r1125845;
double r1125847 = y_re;
double r1125848 = r1125844 * r1125844;
double r1125849 = x_im;
double r1125850 = r1125849 * r1125849;
double r1125851 = r1125848 + r1125850;
double r1125852 = sqrt(r1125851);
double r1125853 = log(r1125852);
double r1125854 = r1125847 * r1125853;
double r1125855 = atan2(r1125849, r1125844);
double r1125856 = y_im;
double r1125857 = r1125855 * r1125856;
double r1125858 = r1125854 - r1125857;
double r1125859 = exp(r1125858);
double r1125860 = r1125855 * r1125847;
double r1125861 = -r1125844;
double r1125862 = log(r1125861);
double r1125863 = r1125856 * r1125862;
double r1125864 = r1125860 + r1125863;
double r1125865 = sin(r1125864);
double r1125866 = r1125859 * r1125865;
double r1125867 = log(r1125844);
double r1125868 = r1125856 * r1125867;
double r1125869 = r1125860 + r1125868;
double r1125870 = sin(r1125869);
double r1125871 = r1125870 * r1125859;
double r1125872 = r1125846 ? r1125866 : r1125871;
return r1125872;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.7421973940893e-310Initial program 31.0
Taylor expanded around -inf 19.0
Simplified19.0
if -1.7421973940893e-310 < x.re Initial program 34.4
rmApplied add-cube-cbrt34.5
Applied associate-*r*34.5
rmApplied add-cube-cbrt34.5
Applied associate-*l*34.5
Taylor expanded around inf 23.9
Simplified23.9
Final simplification21.5
herbie shell --seed 2019152
(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)))))