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.6267295428463203 \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(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r16834 = x_re;
double r16835 = r16834 * r16834;
double r16836 = x_im;
double r16837 = r16836 * r16836;
double r16838 = r16835 + r16837;
double r16839 = sqrt(r16838);
double r16840 = log(r16839);
double r16841 = y_re;
double r16842 = r16840 * r16841;
double r16843 = atan2(r16836, r16834);
double r16844 = y_im;
double r16845 = r16843 * r16844;
double r16846 = r16842 - r16845;
double r16847 = exp(r16846);
double r16848 = r16840 * r16844;
double r16849 = r16843 * r16841;
double r16850 = r16848 + r16849;
double r16851 = sin(r16850);
double r16852 = r16847 * r16851;
return r16852;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r16853 = x_re;
double r16854 = -5.62672954284632e-309;
bool r16855 = r16853 <= r16854;
double r16856 = r16853 * r16853;
double r16857 = x_im;
double r16858 = r16857 * r16857;
double r16859 = r16856 + r16858;
double r16860 = sqrt(r16859);
double r16861 = log(r16860);
double r16862 = y_re;
double r16863 = r16861 * r16862;
double r16864 = atan2(r16857, r16853);
double r16865 = y_im;
double r16866 = r16864 * r16865;
double r16867 = r16863 - r16866;
double r16868 = exp(r16867);
double r16869 = r16864 * r16862;
double r16870 = -1.0;
double r16871 = r16870 / r16853;
double r16872 = log(r16871);
double r16873 = r16865 * r16872;
double r16874 = r16869 - r16873;
double r16875 = sin(r16874);
double r16876 = r16868 * r16875;
double r16877 = log(r16853);
double r16878 = r16877 * r16865;
double r16879 = r16878 + r16869;
double r16880 = sin(r16879);
double r16881 = r16868 * r16880;
double r16882 = r16855 ? r16876 : r16881;
return r16882;
}



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.62672954284632e-309Initial program 31.8
Taylor expanded around -inf 20.5
if -5.62672954284632e-309 < x.re Initial program 34.4
Taylor expanded around inf 24.8
Final simplification22.7
herbie shell --seed 2020024
(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)))))