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 -2.8995865521776026 \cdot 10^{-105}:\\
\;\;\;\;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{elif}\;x.re \le 3.7259888111147467 \cdot 10^{-302}:\\
\;\;\;\;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(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{elif}\;x.re \le 3.9300468248158223 \cdot 10^{-82}:\\
\;\;\;\;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 \sqrt[3]{\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log x.re \cdot y.im\right) \cdot \left(\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log x.re \cdot y.im\right) \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log x.re \cdot y.im\right)\right)}\\
\mathbf{elif}\;x.re \le 9416.095709505209:\\
\;\;\;\;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(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \left(\sqrt[3]{\log x.re \cdot y.im} \cdot \sqrt[3]{\log x.re \cdot y.im}\right) \cdot \sqrt[3]{\log x.re \cdot y.im}\right) \cdot e^{\log x.re \cdot y.re - \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 r587979 = x_re;
double r587980 = r587979 * r587979;
double r587981 = x_im;
double r587982 = r587981 * r587981;
double r587983 = r587980 + r587982;
double r587984 = sqrt(r587983);
double r587985 = log(r587984);
double r587986 = y_re;
double r587987 = r587985 * r587986;
double r587988 = atan2(r587981, r587979);
double r587989 = y_im;
double r587990 = r587988 * r587989;
double r587991 = r587987 - r587990;
double r587992 = exp(r587991);
double r587993 = r587985 * r587989;
double r587994 = r587988 * r587986;
double r587995 = r587993 + r587994;
double r587996 = sin(r587995);
double r587997 = r587992 * r587996;
return r587997;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r587998 = x_re;
double r587999 = -2.8995865521776026e-105;
bool r588000 = r587998 <= r587999;
double r588001 = y_re;
double r588002 = r587998 * r587998;
double r588003 = x_im;
double r588004 = r588003 * r588003;
double r588005 = r588002 + r588004;
double r588006 = sqrt(r588005);
double r588007 = log(r588006);
double r588008 = r588001 * r588007;
double r588009 = atan2(r588003, r587998);
double r588010 = y_im;
double r588011 = r588009 * r588010;
double r588012 = r588008 - r588011;
double r588013 = exp(r588012);
double r588014 = r588009 * r588001;
double r588015 = -r587998;
double r588016 = log(r588015);
double r588017 = r588010 * r588016;
double r588018 = r588014 + r588017;
double r588019 = sin(r588018);
double r588020 = r588013 * r588019;
double r588021 = 3.7259888111147467e-302;
bool r588022 = r587998 <= r588021;
double r588023 = r588010 * r588007;
double r588024 = r588023 + r588014;
double r588025 = sin(r588024);
double r588026 = r588013 * r588025;
double r588027 = 3.9300468248158223e-82;
bool r588028 = r587998 <= r588027;
double r588029 = log(r587998);
double r588030 = r588029 * r588010;
double r588031 = r588014 + r588030;
double r588032 = sin(r588031);
double r588033 = r588032 * r588032;
double r588034 = r588032 * r588033;
double r588035 = cbrt(r588034);
double r588036 = r588013 * r588035;
double r588037 = 9416.095709505209;
bool r588038 = r587998 <= r588037;
double r588039 = cbrt(r588030);
double r588040 = r588039 * r588039;
double r588041 = r588040 * r588039;
double r588042 = r588014 + r588041;
double r588043 = sin(r588042);
double r588044 = r588029 * r588001;
double r588045 = r588044 - r588011;
double r588046 = exp(r588045);
double r588047 = r588043 * r588046;
double r588048 = r588038 ? r588026 : r588047;
double r588049 = r588028 ? r588036 : r588048;
double r588050 = r588022 ? r588026 : r588049;
double r588051 = r588000 ? r588020 : r588050;
return r588051;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -2.8995865521776026e-105Initial program 33.7
Taylor expanded around -inf 20.0
Simplified20.0
if -2.8995865521776026e-105 < x.re < 3.7259888111147467e-302 or 3.9300468248158223e-82 < x.re < 9416.095709505209Initial program 25.3
if 3.7259888111147467e-302 < x.re < 3.9300468248158223e-82Initial program 26.5
Taylor expanded around inf 22.2
Simplified22.2
rmApplied add-cbrt-cube27.1
if 9416.095709505209 < x.re Initial program 44.4
Taylor expanded around inf 28.3
Simplified28.3
Taylor expanded around inf 13.0
rmApplied add-cube-cbrt13.3
Final simplification20.7
herbie shell --seed 2019153
(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)))))