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 r25613 = x_re;
double r25614 = r25613 * r25613;
double r25615 = x_im;
double r25616 = r25615 * r25615;
double r25617 = r25614 + r25616;
double r25618 = sqrt(r25617);
double r25619 = log(r25618);
double r25620 = y_re;
double r25621 = r25619 * r25620;
double r25622 = atan2(r25615, r25613);
double r25623 = y_im;
double r25624 = r25622 * r25623;
double r25625 = r25621 - r25624;
double r25626 = exp(r25625);
double r25627 = r25619 * r25623;
double r25628 = r25622 * r25620;
double r25629 = r25627 + r25628;
double r25630 = sin(r25629);
double r25631 = r25626 * r25630;
return r25631;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r25632 = x_re;
double r25633 = r25632 * r25632;
double r25634 = x_im;
double r25635 = r25634 * r25634;
double r25636 = r25633 + r25635;
double r25637 = sqrt(r25636);
double r25638 = log(r25637);
double r25639 = y_re;
double r25640 = r25638 * r25639;
double r25641 = atan2(r25634, r25632);
double r25642 = y_im;
double r25643 = r25641 * r25642;
double r25644 = r25640 - r25643;
double r25645 = exp(r25644);
double r25646 = r25638 * r25642;
double r25647 = r25641 * r25639;
double r25648 = r25646 + r25647;
double r25649 = sin(r25648);
double r25650 = r25645 * r25649;
double r25651 = 0.7097392203159583;
bool r25652 = r25650 <= r25651;
double r25653 = hypot(r25632, r25634);
double r25654 = log(r25653);
double r25655 = fma(r25654, r25642, r25647);
double r25656 = cbrt(r25655);
double r25657 = r25656 * r25656;
double r25658 = r25657 * r25656;
double r25659 = sin(r25658);
double r25660 = pow(r25653, r25639);
double r25661 = exp(r25643);
double r25662 = r25660 / r25661;
double r25663 = r25659 * r25662;
double r25664 = r25652 ? r25650 : r25663;
return r25664;
}



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)))))