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.im \le -8.820904744264422 \cdot 10^{+74}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sqrt[3]{\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right) \cdot \left(\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right) \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right)\right)}\\
\mathbf{elif}\;x.im \le -1.6276266168851694 \cdot 10^{-22}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\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(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right)\right)\\
\mathbf{elif}\;x.im \le 2.4474235924637755 \cdot 10^{-32}:\\
\;\;\;\;e^{\log \left(-x.re\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(-x.re\right)\right)\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r494004 = x_re;
double r494005 = r494004 * r494004;
double r494006 = x_im;
double r494007 = r494006 * r494006;
double r494008 = r494005 + r494007;
double r494009 = sqrt(r494008);
double r494010 = log(r494009);
double r494011 = y_re;
double r494012 = r494010 * r494011;
double r494013 = atan2(r494006, r494004);
double r494014 = y_im;
double r494015 = r494013 * r494014;
double r494016 = r494012 - r494015;
double r494017 = exp(r494016);
double r494018 = r494010 * r494014;
double r494019 = r494013 * r494011;
double r494020 = r494018 + r494019;
double r494021 = sin(r494020);
double r494022 = r494017 * r494021;
return r494022;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r494023 = x_im;
double r494024 = -8.820904744264422e+74;
bool r494025 = r494023 <= r494024;
double r494026 = y_re;
double r494027 = r494023 * r494023;
double r494028 = x_re;
double r494029 = r494028 * r494028;
double r494030 = r494027 + r494029;
double r494031 = sqrt(r494030);
double r494032 = log(r494031);
double r494033 = r494026 * r494032;
double r494034 = atan2(r494023, r494028);
double r494035 = y_im;
double r494036 = r494034 * r494035;
double r494037 = r494033 - r494036;
double r494038 = exp(r494037);
double r494039 = r494034 * r494026;
double r494040 = -r494028;
double r494041 = log(r494040);
double r494042 = r494035 * r494041;
double r494043 = r494039 + r494042;
double r494044 = sin(r494043);
double r494045 = r494044 * r494044;
double r494046 = r494044 * r494045;
double r494047 = cbrt(r494046);
double r494048 = r494038 * r494047;
double r494049 = -1.6276266168851694e-22;
bool r494050 = r494023 <= r494049;
double r494051 = r494035 * r494032;
double r494052 = r494039 + r494051;
double r494053 = sin(r494052);
double r494054 = r494038 * r494053;
double r494055 = 2.4474235924637755e-32;
bool r494056 = r494023 <= r494055;
double r494057 = r494041 * r494026;
double r494058 = r494057 - r494036;
double r494059 = exp(r494058);
double r494060 = r494059 * r494044;
double r494061 = log(r494023);
double r494062 = r494035 * r494061;
double r494063 = r494039 + r494062;
double r494064 = r494038 * r494063;
double r494065 = r494056 ? r494060 : r494064;
double r494066 = r494050 ? r494054 : r494065;
double r494067 = r494025 ? r494048 : r494066;
return r494067;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.im < -8.820904744264422e+74Initial program 46.1
Taylor expanded around -inf 20.7
Simplified20.7
rmApplied add-cbrt-cube20.9
if -8.820904744264422e+74 < x.im < -1.6276266168851694e-22Initial program 15.3
if -1.6276266168851694e-22 < x.im < 2.4474235924637755e-32Initial program 23.7
Taylor expanded around -inf 11.6
Simplified11.6
Taylor expanded around -inf 4.3
Simplified4.3
if 2.4474235924637755e-32 < x.im Initial program 36.9
Taylor expanded around 0 14.4
Final simplification11.2
herbie shell --seed 2019119
(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)))))