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 -4.1355045148069 \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 r1184071 = x_re;
double r1184072 = r1184071 * r1184071;
double r1184073 = x_im;
double r1184074 = r1184073 * r1184073;
double r1184075 = r1184072 + r1184074;
double r1184076 = sqrt(r1184075);
double r1184077 = log(r1184076);
double r1184078 = y_re;
double r1184079 = r1184077 * r1184078;
double r1184080 = atan2(r1184073, r1184071);
double r1184081 = y_im;
double r1184082 = r1184080 * r1184081;
double r1184083 = r1184079 - r1184082;
double r1184084 = exp(r1184083);
double r1184085 = r1184077 * r1184081;
double r1184086 = r1184080 * r1184078;
double r1184087 = r1184085 + r1184086;
double r1184088 = sin(r1184087);
double r1184089 = r1184084 * r1184088;
return r1184089;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1184090 = x_re;
double r1184091 = -4.1355045148069e-310;
bool r1184092 = r1184090 <= r1184091;
double r1184093 = y_re;
double r1184094 = r1184090 * r1184090;
double r1184095 = x_im;
double r1184096 = r1184095 * r1184095;
double r1184097 = r1184094 + r1184096;
double r1184098 = sqrt(r1184097);
double r1184099 = log(r1184098);
double r1184100 = r1184093 * r1184099;
double r1184101 = atan2(r1184095, r1184090);
double r1184102 = y_im;
double r1184103 = r1184101 * r1184102;
double r1184104 = r1184100 - r1184103;
double r1184105 = exp(r1184104);
double r1184106 = r1184101 * r1184093;
double r1184107 = -r1184090;
double r1184108 = log(r1184107);
double r1184109 = r1184102 * r1184108;
double r1184110 = r1184106 + r1184109;
double r1184111 = sin(r1184110);
double r1184112 = r1184105 * r1184111;
double r1184113 = log(r1184090);
double r1184114 = r1184102 * r1184113;
double r1184115 = r1184106 + r1184114;
double r1184116 = sin(r1184115);
double r1184117 = r1184116 * r1184105;
double r1184118 = r1184092 ? r1184112 : r1184117;
return r1184118;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -4.1355045148069e-310Initial program 31.3
Taylor expanded around -inf 20.2
Simplified20.2
if -4.1355045148069e-310 < x.re Initial program 33.5
Taylor expanded around inf 24.2
Final simplification22.3
herbie shell --seed 2019151
(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)))))