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.70557298521432880422774654126185698115 \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(\log x.re \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r28258 = x_re;
double r28259 = r28258 * r28258;
double r28260 = x_im;
double r28261 = r28260 * r28260;
double r28262 = r28259 + r28261;
double r28263 = sqrt(r28262);
double r28264 = log(r28263);
double r28265 = y_re;
double r28266 = r28264 * r28265;
double r28267 = atan2(r28260, r28258);
double r28268 = y_im;
double r28269 = r28267 * r28268;
double r28270 = r28266 - r28269;
double r28271 = exp(r28270);
double r28272 = r28264 * r28268;
double r28273 = r28267 * r28265;
double r28274 = r28272 + r28273;
double r28275 = sin(r28274);
double r28276 = r28271 * r28275;
return r28276;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r28277 = x_re;
double r28278 = -5.70557298521433e-309;
bool r28279 = r28277 <= r28278;
double r28280 = r28277 * r28277;
double r28281 = x_im;
double r28282 = r28281 * r28281;
double r28283 = r28280 + r28282;
double r28284 = sqrt(r28283);
double r28285 = log(r28284);
double r28286 = y_re;
double r28287 = r28285 * r28286;
double r28288 = atan2(r28281, r28277);
double r28289 = y_im;
double r28290 = r28288 * r28289;
double r28291 = r28287 - r28290;
double r28292 = exp(r28291);
double r28293 = r28288 * r28286;
double r28294 = -1.0;
double r28295 = r28294 / r28277;
double r28296 = log(r28295);
double r28297 = r28289 * r28296;
double r28298 = r28293 - r28297;
double r28299 = sin(r28298);
double r28300 = r28292 * r28299;
double r28301 = log(r28277);
double r28302 = r28301 * r28289;
double r28303 = r28302 + r28293;
double r28304 = sin(r28303);
double r28305 = r28292 * r28304;
double r28306 = r28279 ? r28300 : r28305;
return r28306;
}



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.70557298521433e-309Initial program 31.6
Taylor expanded around -inf 21.0
if -5.70557298521433e-309 < x.re Initial program 35.0
Taylor expanded around inf 24.5
Simplified24.5
Final simplification22.8
herbie shell --seed 2019326
(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)))))