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 -1.7421973940893 \cdot 10^{-310}:\\
\;\;\;\;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{else}:\\
\;\;\;\;\sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log x.re\right) \cdot 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}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r692121 = x_re;
double r692122 = r692121 * r692121;
double r692123 = x_im;
double r692124 = r692123 * r692123;
double r692125 = r692122 + r692124;
double r692126 = sqrt(r692125);
double r692127 = log(r692126);
double r692128 = y_re;
double r692129 = r692127 * r692128;
double r692130 = atan2(r692123, r692121);
double r692131 = y_im;
double r692132 = r692130 * r692131;
double r692133 = r692129 - r692132;
double r692134 = exp(r692133);
double r692135 = r692127 * r692131;
double r692136 = r692130 * r692128;
double r692137 = r692135 + r692136;
double r692138 = sin(r692137);
double r692139 = r692134 * r692138;
return r692139;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r692140 = x_re;
double r692141 = -1.7421973940893e-310;
bool r692142 = r692140 <= r692141;
double r692143 = y_re;
double r692144 = r692140 * r692140;
double r692145 = x_im;
double r692146 = r692145 * r692145;
double r692147 = r692144 + r692146;
double r692148 = sqrt(r692147);
double r692149 = log(r692148);
double r692150 = r692143 * r692149;
double r692151 = atan2(r692145, r692140);
double r692152 = y_im;
double r692153 = r692151 * r692152;
double r692154 = r692150 - r692153;
double r692155 = exp(r692154);
double r692156 = r692151 * r692143;
double r692157 = -r692140;
double r692158 = log(r692157);
double r692159 = r692152 * r692158;
double r692160 = r692156 + r692159;
double r692161 = sin(r692160);
double r692162 = r692155 * r692161;
double r692163 = log(r692140);
double r692164 = r692152 * r692163;
double r692165 = r692156 + r692164;
double r692166 = sin(r692165);
double r692167 = r692166 * r692155;
double r692168 = r692142 ? r692162 : r692167;
return r692168;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1.7421973940893e-310Initial program 31.0
Taylor expanded around -inf 19.0
Simplified19.0
if -1.7421973940893e-310 < x.re Initial program 34.4
Taylor expanded around inf 23.9
Simplified23.9
Final simplification21.5
herbie shell --seed 2019152
(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)))))