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.484553050797035804670682450978201199884 \cdot 10^{64}:\\
\;\;\;\;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{elif}\;x.re \le -1.197356869030033423932962593195270915285 \cdot 10^{-68}:\\
\;\;\;\;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 \left(\left(\sqrt[3]{\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)} \cdot \sqrt[3]{\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)}\right) \cdot \sqrt[3]{\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)}\right)\\
\mathbf{elif}\;x.re \le -5.879793377467557445546507040277763544615 \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 r26071 = x_re;
double r26072 = r26071 * r26071;
double r26073 = x_im;
double r26074 = r26073 * r26073;
double r26075 = r26072 + r26074;
double r26076 = sqrt(r26075);
double r26077 = log(r26076);
double r26078 = y_re;
double r26079 = r26077 * r26078;
double r26080 = atan2(r26073, r26071);
double r26081 = y_im;
double r26082 = r26080 * r26081;
double r26083 = r26079 - r26082;
double r26084 = exp(r26083);
double r26085 = r26077 * r26081;
double r26086 = r26080 * r26078;
double r26087 = r26085 + r26086;
double r26088 = sin(r26087);
double r26089 = r26084 * r26088;
return r26089;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r26090 = x_re;
double r26091 = -4.484553050797036e+64;
bool r26092 = r26090 <= r26091;
double r26093 = r26090 * r26090;
double r26094 = x_im;
double r26095 = r26094 * r26094;
double r26096 = r26093 + r26095;
double r26097 = sqrt(r26096);
double r26098 = log(r26097);
double r26099 = y_re;
double r26100 = r26098 * r26099;
double r26101 = atan2(r26094, r26090);
double r26102 = y_im;
double r26103 = r26101 * r26102;
double r26104 = r26100 - r26103;
double r26105 = exp(r26104);
double r26106 = r26101 * r26099;
double r26107 = -1.0;
double r26108 = r26107 / r26090;
double r26109 = log(r26108);
double r26110 = r26102 * r26109;
double r26111 = r26106 - r26110;
double r26112 = sin(r26111);
double r26113 = r26105 * r26112;
double r26114 = -1.1973568690300334e-68;
bool r26115 = r26090 <= r26114;
double r26116 = r26098 * r26102;
double r26117 = r26116 + r26106;
double r26118 = sin(r26117);
double r26119 = cbrt(r26118);
double r26120 = r26119 * r26119;
double r26121 = r26120 * r26119;
double r26122 = r26105 * r26121;
double r26123 = -5.879793377467557e-309;
bool r26124 = r26090 <= r26123;
double r26125 = log(r26090);
double r26126 = r26125 * r26102;
double r26127 = r26126 + r26106;
double r26128 = sin(r26127);
double r26129 = r26105 * r26128;
double r26130 = r26124 ? r26113 : r26129;
double r26131 = r26115 ? r26122 : r26130;
double r26132 = r26092 ? r26113 : r26131;
return r26132;
}



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.484553050797036e+64 or -1.1973568690300334e-68 < x.re < -5.879793377467557e-309Initial program 36.2
Taylor expanded around -inf 22.5
if -4.484553050797036e+64 < x.re < -1.1973568690300334e-68Initial program 17.5
rmApplied add-cube-cbrt17.9
if -5.879793377467557e-309 < x.re Initial program 34.9
Taylor expanded around inf 24.6
Final simplification23.2
herbie shell --seed 2019291
(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)))))