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}\;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) \le 0.7097392203159582635407787165604531764984:\\
\;\;\;\;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)\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\left(\sqrt[3]{\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)} \cdot \sqrt[3]{\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) \cdot \sqrt[3]{\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) \cdot \frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{e^{\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 r25547 = x_re;
double r25548 = r25547 * r25547;
double r25549 = x_im;
double r25550 = r25549 * r25549;
double r25551 = r25548 + r25550;
double r25552 = sqrt(r25551);
double r25553 = log(r25552);
double r25554 = y_re;
double r25555 = r25553 * r25554;
double r25556 = atan2(r25549, r25547);
double r25557 = y_im;
double r25558 = r25556 * r25557;
double r25559 = r25555 - r25558;
double r25560 = exp(r25559);
double r25561 = r25553 * r25557;
double r25562 = r25556 * r25554;
double r25563 = r25561 + r25562;
double r25564 = sin(r25563);
double r25565 = r25560 * r25564;
return r25565;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25566 = x_re;
double r25567 = r25566 * r25566;
double r25568 = x_im;
double r25569 = r25568 * r25568;
double r25570 = r25567 + r25569;
double r25571 = sqrt(r25570);
double r25572 = log(r25571);
double r25573 = y_re;
double r25574 = r25572 * r25573;
double r25575 = atan2(r25568, r25566);
double r25576 = y_im;
double r25577 = r25575 * r25576;
double r25578 = r25574 - r25577;
double r25579 = exp(r25578);
double r25580 = r25572 * r25576;
double r25581 = r25575 * r25573;
double r25582 = r25580 + r25581;
double r25583 = sin(r25582);
double r25584 = r25579 * r25583;
double r25585 = 0.7097392203159583;
bool r25586 = r25584 <= r25585;
double r25587 = hypot(r25566, r25568);
double r25588 = log(r25587);
double r25589 = fma(r25588, r25576, r25581);
double r25590 = cbrt(r25589);
double r25591 = r25590 * r25590;
double r25592 = r25591 * r25590;
double r25593 = sin(r25592);
double r25594 = pow(r25587, r25573);
double r25595 = exp(r25577);
double r25596 = r25594 / r25595;
double r25597 = r25593 * r25596;
double r25598 = r25586 ? r25584 : r25597;
return r25598;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if (* (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)))) < 0.7097392203159583Initial program 2.5
if 0.7097392203159583 < (* (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)))) Initial program 63.8
Simplified9.8
rmApplied add-cube-cbrt10.2
Final simplification6.4
herbie shell --seed 2019323 +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)))))