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.57158609869316242644016956038105880652 \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 r24992 = x_re;
double r24993 = r24992 * r24992;
double r24994 = x_im;
double r24995 = r24994 * r24994;
double r24996 = r24993 + r24995;
double r24997 = sqrt(r24996);
double r24998 = log(r24997);
double r24999 = y_re;
double r25000 = r24998 * r24999;
double r25001 = atan2(r24994, r24992);
double r25002 = y_im;
double r25003 = r25001 * r25002;
double r25004 = r25000 - r25003;
double r25005 = exp(r25004);
double r25006 = r24998 * r25002;
double r25007 = r25001 * r24999;
double r25008 = r25006 + r25007;
double r25009 = sin(r25008);
double r25010 = r25005 * r25009;
return r25010;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25011 = x_re;
double r25012 = -5.57158609869316e-309;
bool r25013 = r25011 <= r25012;
double r25014 = r25011 * r25011;
double r25015 = x_im;
double r25016 = r25015 * r25015;
double r25017 = r25014 + r25016;
double r25018 = sqrt(r25017);
double r25019 = log(r25018);
double r25020 = y_re;
double r25021 = r25019 * r25020;
double r25022 = atan2(r25015, r25011);
double r25023 = y_im;
double r25024 = r25022 * r25023;
double r25025 = r25021 - r25024;
double r25026 = exp(r25025);
double r25027 = r25022 * r25020;
double r25028 = -1.0;
double r25029 = r25028 / r25011;
double r25030 = log(r25029);
double r25031 = r25023 * r25030;
double r25032 = r25027 - r25031;
double r25033 = sin(r25032);
double r25034 = r25026 * r25033;
double r25035 = 1.0;
double r25036 = r25035 / r25011;
double r25037 = log(r25036);
double r25038 = r25023 * r25037;
double r25039 = r25027 - r25038;
double r25040 = sin(r25039);
double r25041 = r25026 * r25040;
double r25042 = r25013 ? r25034 : r25041;
return r25042;
}



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.57158609869316e-309Initial program 32.0
Taylor expanded around -inf 20.1
if -5.57158609869316e-309 < x.re Initial program 35.1
rmApplied add-cbrt-cube41.5
Simplified41.5
Taylor expanded around inf 24.7
Final simplification22.4
herbie shell --seed 2019322
(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)))))