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}\;x.re \le -1694155.0241369938:\\
\;\;\;\;e^{\log \left(-x.re\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\\
\mathbf{elif}\;x.re \le -4.83786766224259 \cdot 10^{-227}:\\
\;\;\;\;\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\mathbf{elif}\;x.re \le -1.280939127235916 \cdot 10^{-239}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}} \cdot \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)\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\log \left(-x.re\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) \cdot e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - y.im \cdot \tan^{-1}_* \frac{x.im}{x.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r1025660 = x_re;
double r1025661 = r1025660 * r1025660;
double r1025662 = x_im;
double r1025663 = r1025662 * r1025662;
double r1025664 = r1025661 + r1025663;
double r1025665 = sqrt(r1025664);
double r1025666 = log(r1025665);
double r1025667 = y_re;
double r1025668 = r1025666 * r1025667;
double r1025669 = atan2(r1025662, r1025660);
double r1025670 = y_im;
double r1025671 = r1025669 * r1025670;
double r1025672 = r1025668 - r1025671;
double r1025673 = exp(r1025672);
double r1025674 = r1025666 * r1025670;
double r1025675 = r1025669 * r1025667;
double r1025676 = r1025674 + r1025675;
double r1025677 = sin(r1025676);
double r1025678 = r1025673 * r1025677;
return r1025678;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1025679 = x_re;
double r1025680 = -1694155.0241369938;
bool r1025681 = r1025679 <= r1025680;
double r1025682 = -r1025679;
double r1025683 = log(r1025682);
double r1025684 = y_re;
double r1025685 = r1025683 * r1025684;
double r1025686 = y_im;
double r1025687 = x_im;
double r1025688 = atan2(r1025687, r1025679);
double r1025689 = r1025686 * r1025688;
double r1025690 = r1025685 - r1025689;
double r1025691 = exp(r1025690);
double r1025692 = r1025683 * r1025686;
double r1025693 = r1025688 * r1025684;
double r1025694 = r1025692 + r1025693;
double r1025695 = sin(r1025694);
double r1025696 = r1025691 * r1025695;
double r1025697 = -4.83786766224259e-227;
bool r1025698 = r1025679 <= r1025697;
double r1025699 = r1025679 * r1025679;
double r1025700 = r1025687 * r1025687;
double r1025701 = r1025699 + r1025700;
double r1025702 = sqrt(r1025701);
double r1025703 = log(r1025702);
double r1025704 = r1025703 * r1025684;
double r1025705 = r1025704 - r1025689;
double r1025706 = exp(r1025705);
double r1025707 = r1025695 * r1025706;
double r1025708 = -1.280939127235916e-239;
bool r1025709 = r1025679 <= r1025708;
double r1025710 = r1025686 * r1025703;
double r1025711 = r1025710 + r1025693;
double r1025712 = sin(r1025711);
double r1025713 = r1025706 * r1025712;
double r1025714 = r1025709 ? r1025713 : r1025707;
double r1025715 = r1025698 ? r1025707 : r1025714;
double r1025716 = r1025681 ? r1025696 : r1025715;
return r1025716;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < -1694155.0241369938Initial program 39.3
Taylor expanded around -inf 15.2
Simplified15.2
Taylor expanded around -inf 4.7
Simplified4.7
if -1694155.0241369938 < x.re < -4.83786766224259e-227 or -1.280939127235916e-239 < x.re Initial program 23.2
Taylor expanded around -inf 17.1
Simplified17.1
if -4.83786766224259e-227 < x.re < -1.280939127235916e-239Initial program 28.2
Final simplification11.3
herbie shell --seed 2019141
(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)))))