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.91205330543206 \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 r1590176 = x_re;
double r1590177 = r1590176 * r1590176;
double r1590178 = x_im;
double r1590179 = r1590178 * r1590178;
double r1590180 = r1590177 + r1590179;
double r1590181 = sqrt(r1590180);
double r1590182 = log(r1590181);
double r1590183 = y_re;
double r1590184 = r1590182 * r1590183;
double r1590185 = atan2(r1590178, r1590176);
double r1590186 = y_im;
double r1590187 = r1590185 * r1590186;
double r1590188 = r1590184 - r1590187;
double r1590189 = exp(r1590188);
double r1590190 = r1590182 * r1590186;
double r1590191 = r1590185 * r1590183;
double r1590192 = r1590190 + r1590191;
double r1590193 = sin(r1590192);
double r1590194 = r1590189 * r1590193;
return r1590194;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1590195 = x_re;
double r1590196 = -1.91205330543206e-310;
bool r1590197 = r1590195 <= r1590196;
double r1590198 = y_re;
double r1590199 = r1590195 * r1590195;
double r1590200 = x_im;
double r1590201 = r1590200 * r1590200;
double r1590202 = r1590199 + r1590201;
double r1590203 = sqrt(r1590202);
double r1590204 = log(r1590203);
double r1590205 = r1590198 * r1590204;
double r1590206 = atan2(r1590200, r1590195);
double r1590207 = y_im;
double r1590208 = r1590206 * r1590207;
double r1590209 = r1590205 - r1590208;
double r1590210 = exp(r1590209);
double r1590211 = r1590206 * r1590198;
double r1590212 = -r1590195;
double r1590213 = log(r1590212);
double r1590214 = r1590207 * r1590213;
double r1590215 = r1590211 + r1590214;
double r1590216 = sin(r1590215);
double r1590217 = r1590210 * r1590216;
double r1590218 = log(r1590195);
double r1590219 = r1590207 * r1590218;
double r1590220 = r1590211 + r1590219;
double r1590221 = sin(r1590220);
double r1590222 = r1590221 * r1590210;
double r1590223 = r1590197 ? r1590217 : r1590222;
return r1590223;
}



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.91205330543206e-310Initial program 31.8
Taylor expanded around -inf 20.3
Simplified20.3
if -1.91205330543206e-310 < x.re Initial program 35.3
Taylor expanded around inf 24.7
Final simplification22.6
herbie shell --seed 2019165
(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)))))