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}\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.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} \le 2.275019997548229496839694146201674151975 \cdot 10^{-9}:\\
\;\;\;\;\sin \left(y.im \cdot \log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.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}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\sin \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right) \cdot {\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{{\left(e^{\tan^{-1}_* \frac{x.im}{x.re}}\right)}^{y.im}}} \cdot \left(\sqrt[3]{\frac{\sin \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right) \cdot {\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{{\left(e^{\tan^{-1}_* \frac{x.im}{x.re}}\right)}^{y.im}}} \cdot \sqrt[3]{\frac{\sin \left(\mathsf{fma}\left(y.im, \log \left(\mathsf{hypot}\left(x.re, x.im\right)\right), \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right) \cdot {\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re}}{{\left(e^{\tan^{-1}_* \frac{x.im}{x.re}}\right)}^{y.im}}}\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r31559 = x_re;
double r31560 = r31559 * r31559;
double r31561 = x_im;
double r31562 = r31561 * r31561;
double r31563 = r31560 + r31562;
double r31564 = sqrt(r31563);
double r31565 = log(r31564);
double r31566 = y_re;
double r31567 = r31565 * r31566;
double r31568 = atan2(r31561, r31559);
double r31569 = y_im;
double r31570 = r31568 * r31569;
double r31571 = r31567 - r31570;
double r31572 = exp(r31571);
double r31573 = r31565 * r31569;
double r31574 = r31568 * r31566;
double r31575 = r31573 + r31574;
double r31576 = sin(r31575);
double r31577 = r31572 * r31576;
return r31577;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r31578 = y_im;
double r31579 = x_re;
double r31580 = r31579 * r31579;
double r31581 = x_im;
double r31582 = r31581 * r31581;
double r31583 = r31580 + r31582;
double r31584 = sqrt(r31583);
double r31585 = log(r31584);
double r31586 = r31578 * r31585;
double r31587 = atan2(r31581, r31579);
double r31588 = y_re;
double r31589 = r31587 * r31588;
double r31590 = r31586 + r31589;
double r31591 = sin(r31590);
double r31592 = r31588 * r31585;
double r31593 = r31587 * r31578;
double r31594 = r31592 - r31593;
double r31595 = exp(r31594);
double r31596 = r31591 * r31595;
double r31597 = 2.2750199975482295e-09;
bool r31598 = r31596 <= r31597;
double r31599 = hypot(r31579, r31581);
double r31600 = log(r31599);
double r31601 = fma(r31578, r31600, r31589);
double r31602 = sin(r31601);
double r31603 = pow(r31599, r31588);
double r31604 = r31602 * r31603;
double r31605 = exp(r31587);
double r31606 = pow(r31605, r31578);
double r31607 = r31604 / r31606;
double r31608 = cbrt(r31607);
double r31609 = r31608 * r31608;
double r31610 = r31608 * r31609;
double r31611 = r31598 ? r31596 : r31610;
return r31611;
}



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)))) < 2.2750199975482295e-09Initial program 1.5
if 2.2750199975482295e-09 < (* (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.0
Simplified10.5
rmApplied add-cube-cbrt11.0
Simplified11.0
Simplified11.1
Final simplification6.4
herbie shell --seed 2019179 +o rules:numerics
(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)))))