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.4950846895138817 \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 r17066 = x_re;
double r17067 = r17066 * r17066;
double r17068 = x_im;
double r17069 = r17068 * r17068;
double r17070 = r17067 + r17069;
double r17071 = sqrt(r17070);
double r17072 = log(r17071);
double r17073 = y_re;
double r17074 = r17072 * r17073;
double r17075 = atan2(r17068, r17066);
double r17076 = y_im;
double r17077 = r17075 * r17076;
double r17078 = r17074 - r17077;
double r17079 = exp(r17078);
double r17080 = r17072 * r17076;
double r17081 = r17075 * r17073;
double r17082 = r17080 + r17081;
double r17083 = sin(r17082);
double r17084 = r17079 * r17083;
return r17084;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r17085 = x_re;
double r17086 = -5.49508468951388e-309;
bool r17087 = r17085 <= r17086;
double r17088 = r17085 * r17085;
double r17089 = x_im;
double r17090 = r17089 * r17089;
double r17091 = r17088 + r17090;
double r17092 = sqrt(r17091);
double r17093 = log(r17092);
double r17094 = y_re;
double r17095 = r17093 * r17094;
double r17096 = atan2(r17089, r17085);
double r17097 = y_im;
double r17098 = r17096 * r17097;
double r17099 = r17095 - r17098;
double r17100 = exp(r17099);
double r17101 = r17096 * r17094;
double r17102 = -1.0;
double r17103 = r17102 / r17085;
double r17104 = log(r17103);
double r17105 = r17097 * r17104;
double r17106 = r17101 - r17105;
double r17107 = sin(r17106);
double r17108 = r17100 * r17107;
double r17109 = 1.0;
double r17110 = r17109 / r17085;
double r17111 = log(r17110);
double r17112 = r17097 * r17111;
double r17113 = r17101 - r17112;
double r17114 = sin(r17113);
double r17115 = r17100 * r17114;
double r17116 = r17087 ? r17108 : r17115;
return r17116;
}



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.49508468951388e-309Initial program 32.1
Taylor expanded around -inf 21.4
if -5.49508468951388e-309 < x.re Initial program 34.3
rmApplied add-cbrt-cube40.8
Simplified40.8
Taylor expanded around inf 24.1
Final simplification22.8
herbie shell --seed 2020036
(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)))))