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 \cos \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}\;\cos \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 -0.0:\\
\;\;\;\;\cos \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}:\\
\;\;\;\;\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}}{\sqrt[3]{\cos \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(\sqrt[3]{\sqrt[3]{\cos \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(\sqrt[3]{\cos \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 \sqrt[3]{\cos \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)}\right)} \cdot \sqrt[3]{\cos \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)}\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r28706 = x_re;
double r28707 = r28706 * r28706;
double r28708 = x_im;
double r28709 = r28708 * r28708;
double r28710 = r28707 + r28709;
double r28711 = sqrt(r28710);
double r28712 = log(r28711);
double r28713 = y_re;
double r28714 = r28712 * r28713;
double r28715 = atan2(r28708, r28706);
double r28716 = y_im;
double r28717 = r28715 * r28716;
double r28718 = r28714 - r28717;
double r28719 = exp(r28718);
double r28720 = r28712 * r28716;
double r28721 = r28715 * r28713;
double r28722 = r28720 + r28721;
double r28723 = cos(r28722);
double r28724 = r28719 * r28723;
return r28724;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r28725 = y_im;
double r28726 = x_re;
double r28727 = r28726 * r28726;
double r28728 = x_im;
double r28729 = r28728 * r28728;
double r28730 = r28727 + r28729;
double r28731 = sqrt(r28730);
double r28732 = log(r28731);
double r28733 = r28725 * r28732;
double r28734 = atan2(r28728, r28726);
double r28735 = y_re;
double r28736 = r28734 * r28735;
double r28737 = r28733 + r28736;
double r28738 = cos(r28737);
double r28739 = r28735 * r28732;
double r28740 = r28734 * r28725;
double r28741 = r28739 - r28740;
double r28742 = exp(r28741);
double r28743 = r28738 * r28742;
double r28744 = -0.0;
bool r28745 = r28743 <= r28744;
double r28746 = hypot(r28726, r28728);
double r28747 = pow(r28746, r28735);
double r28748 = exp(r28740);
double r28749 = log(r28746);
double r28750 = fma(r28725, r28749, r28736);
double r28751 = cos(r28750);
double r28752 = cbrt(r28751);
double r28753 = r28748 / r28752;
double r28754 = r28747 / r28753;
double r28755 = r28752 * r28752;
double r28756 = r28752 * r28755;
double r28757 = cbrt(r28756);
double r28758 = r28757 * r28752;
double r28759 = r28754 * r28758;
double r28760 = r28745 ? r28743 : r28759;
return r28760;
}



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))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))) < -0.0Initial program 4.4
if -0.0 < (* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))) Initial program 38.5
Simplified8.7
rmApplied add-cube-cbrt8.7
Applied *-un-lft-identity8.7
Applied unpow-prod-down8.7
Applied times-frac8.7
Applied *-un-lft-identity8.7
Applied unpow-prod-down8.7
Applied times-frac8.7
Simplified8.7
Simplified8.1
rmApplied add-cube-cbrt8.1
Final simplification6.2
herbie shell --seed 2019196 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "powComplex, real part"
(* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))