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}\;y.re \le -2.3684273757276652 \cdot 10^{74} \lor \neg \left(y.re \le 20.400440132882025\right):\\
\;\;\;\;e^{\log \left({\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re} \cdot \sin \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{\frac{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{\sin \left(\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), y.im, \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r26444 = x_re;
double r26445 = r26444 * r26444;
double r26446 = x_im;
double r26447 = r26446 * r26446;
double r26448 = r26445 + r26447;
double r26449 = sqrt(r26448);
double r26450 = log(r26449);
double r26451 = y_re;
double r26452 = r26450 * r26451;
double r26453 = atan2(r26446, r26444);
double r26454 = y_im;
double r26455 = r26453 * r26454;
double r26456 = r26452 - r26455;
double r26457 = exp(r26456);
double r26458 = r26450 * r26454;
double r26459 = r26453 * r26451;
double r26460 = r26458 + r26459;
double r26461 = sin(r26460);
double r26462 = r26457 * r26461;
return r26462;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r26463 = y_re;
double r26464 = -2.368427375727665e+74;
bool r26465 = r26463 <= r26464;
double r26466 = 20.400440132882025;
bool r26467 = r26463 <= r26466;
double r26468 = !r26467;
bool r26469 = r26465 || r26468;
double r26470 = x_re;
double r26471 = x_im;
double r26472 = hypot(r26470, r26471);
double r26473 = pow(r26472, r26463);
double r26474 = log(r26472);
double r26475 = y_im;
double r26476 = atan2(r26471, r26470);
double r26477 = r26476 * r26463;
double r26478 = fma(r26474, r26475, r26477);
double r26479 = sin(r26478);
double r26480 = r26473 * r26479;
double r26481 = log(r26480);
double r26482 = r26476 * r26475;
double r26483 = r26481 - r26482;
double r26484 = exp(r26483);
double r26485 = exp(r26482);
double r26486 = r26485 / r26479;
double r26487 = r26473 / r26486;
double r26488 = r26469 ? r26484 : r26487;
return r26488;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.re < -2.368427375727665e+74 or 20.400440132882025 < y.re Initial program 29.8
Simplified15.3
rmApplied add-exp-log39.5
Applied add-exp-log39.5
Applied pow-exp39.5
Applied prod-exp39.5
Applied div-exp32.0
Simplified7.1
if -2.368427375727665e+74 < y.re < 20.400440132882025Initial program 34.7
Simplified5.4
rmApplied associate-/l*5.4
Final simplification6.0
herbie shell --seed 2020042 +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)))))