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 -3.853834220586221 \cdot 10^{184}:\\
\;\;\;\;\frac{\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re - y.im \cdot \log \left(\frac{-1}{x.re}\right)\right)}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im - \left(-y.re \cdot \log \left(\frac{-1}{x.re}\right)\right)}}\\
\mathbf{elif}\;x.re \le 2.2092076921331203 \cdot 10^{89}:\\
\;\;\;\;\frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re} \cdot \left(\sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right) \cdot \cos \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) + \cos \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right) \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sin \left(\mathsf{fma}\left(\tan^{-1}_* \frac{x.im}{x.re}, y.re, \log x.re \cdot y.im\right)\right)}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im - y.re \cdot \log x.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r21959 = x_re;
double r21960 = r21959 * r21959;
double r21961 = x_im;
double r21962 = r21961 * r21961;
double r21963 = r21960 + r21962;
double r21964 = sqrt(r21963);
double r21965 = log(r21964);
double r21966 = y_re;
double r21967 = r21965 * r21966;
double r21968 = atan2(r21961, r21959);
double r21969 = y_im;
double r21970 = r21968 * r21969;
double r21971 = r21967 - r21970;
double r21972 = exp(r21971);
double r21973 = r21965 * r21969;
double r21974 = r21968 * r21966;
double r21975 = r21973 + r21974;
double r21976 = sin(r21975);
double r21977 = r21972 * r21976;
return r21977;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r21978 = x_re;
double r21979 = -3.853834220586221e+184;
bool r21980 = r21978 <= r21979;
double r21981 = x_im;
double r21982 = atan2(r21981, r21978);
double r21983 = y_re;
double r21984 = r21982 * r21983;
double r21985 = y_im;
double r21986 = -1.0;
double r21987 = r21986 / r21978;
double r21988 = log(r21987);
double r21989 = r21985 * r21988;
double r21990 = r21984 - r21989;
double r21991 = sin(r21990);
double r21992 = r21982 * r21985;
double r21993 = r21983 * r21988;
double r21994 = -r21993;
double r21995 = r21992 - r21994;
double r21996 = exp(r21995);
double r21997 = r21991 / r21996;
double r21998 = 2.2092076921331203e+89;
bool r21999 = r21978 <= r21998;
double r22000 = hypot(r21978, r21981);
double r22001 = pow(r22000, r21983);
double r22002 = log(r22000);
double r22003 = r22002 * r21985;
double r22004 = sin(r22003);
double r22005 = cos(r21984);
double r22006 = r22004 * r22005;
double r22007 = cos(r22003);
double r22008 = sin(r21984);
double r22009 = r22007 * r22008;
double r22010 = r22006 + r22009;
double r22011 = r22001 * r22010;
double r22012 = exp(r21992);
double r22013 = r22011 / r22012;
double r22014 = log(r21978);
double r22015 = r22014 * r21985;
double r22016 = fma(r21982, r21983, r22015);
double r22017 = sin(r22016);
double r22018 = r21983 * r22014;
double r22019 = r21992 - r22018;
double r22020 = exp(r22019);
double r22021 = r22017 / r22020;
double r22022 = r21999 ? r22013 : r22021;
double r22023 = r21980 ? r21997 : r22022;
return r22023;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if x.re < -3.853834220586221e+184Initial program 64.0
Simplified7.2
Taylor expanded around -inf 8.4
Simplified1.5
if -3.853834220586221e+184 < x.re < 2.2092076921331203e+89Initial program 24.6
Simplified8.1
rmApplied fma-udef8.1
Applied sin-sum8.1
if 2.2092076921331203e+89 < x.re Initial program 52.0
Simplified13.7
Taylor expanded around inf 15.6
Simplified13.1
Final simplification8.4
herbie shell --seed 2020046 +o rules:numerics
(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)))))