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.im \le -2.5472724614357004 \cdot 10^{-19}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(-x.re\right)\right)\\
\mathbf{elif}\;x.im \le 1.4263058830387834 \cdot 10^{-245}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(\sqrt[3]{\sqrt{x.im \cdot x.im + x.re \cdot x.re}} \cdot \left(\sqrt[3]{\sqrt{x.im \cdot x.im + x.re \cdot x.re}} \cdot \sqrt[3]{\sqrt{x.im \cdot x.im + x.re \cdot x.re}}\right)\right)\right)\\
\mathbf{elif}\;x.im \le 5.3514152020060203 \cdot 10^{-79}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) - \left(\left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im\right)\right)} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log x.im \cdot y.im\right)\\
\mathbf{elif}\;x.im \le 1.544354402853649 \cdot 10^{-16}:\\
\;\;\;\;e^{y.re \cdot \log \left(\sqrt{x.im \cdot x.im + x.re \cdot x.re}\right) - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + y.im \cdot \log \left(\sqrt[3]{\sqrt{x.im \cdot x.im + x.re \cdot x.re}} \cdot \left(\sqrt[3]{\sqrt{x.im \cdot x.im + x.re \cdot x.re}} \cdot \sqrt[3]{\sqrt{x.im \cdot x.im + x.re \cdot x.re}}\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;e^{y.re \cdot \log x.im - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re + \log x.im \cdot y.im\right)\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r978562 = x_re;
double r978563 = r978562 * r978562;
double r978564 = x_im;
double r978565 = r978564 * r978564;
double r978566 = r978563 + r978565;
double r978567 = sqrt(r978566);
double r978568 = log(r978567);
double r978569 = y_re;
double r978570 = r978568 * r978569;
double r978571 = atan2(r978564, r978562);
double r978572 = y_im;
double r978573 = r978571 * r978572;
double r978574 = r978570 - r978573;
double r978575 = exp(r978574);
double r978576 = r978568 * r978572;
double r978577 = r978571 * r978569;
double r978578 = r978576 + r978577;
double r978579 = sin(r978578);
double r978580 = r978575 * r978579;
return r978580;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r978581 = x_im;
double r978582 = -2.5472724614357004e-19;
bool r978583 = r978581 <= r978582;
double r978584 = y_re;
double r978585 = r978581 * r978581;
double r978586 = x_re;
double r978587 = r978586 * r978586;
double r978588 = r978585 + r978587;
double r978589 = sqrt(r978588);
double r978590 = log(r978589);
double r978591 = r978584 * r978590;
double r978592 = atan2(r978581, r978586);
double r978593 = y_im;
double r978594 = r978592 * r978593;
double r978595 = r978591 - r978594;
double r978596 = exp(r978595);
double r978597 = r978592 * r978584;
double r978598 = -r978586;
double r978599 = log(r978598);
double r978600 = r978593 * r978599;
double r978601 = r978597 + r978600;
double r978602 = sin(r978601);
double r978603 = r978596 * r978602;
double r978604 = 1.4263058830387834e-245;
bool r978605 = r978581 <= r978604;
double r978606 = cbrt(r978589);
double r978607 = r978606 * r978606;
double r978608 = r978606 * r978607;
double r978609 = log(r978608);
double r978610 = r978593 * r978609;
double r978611 = r978597 + r978610;
double r978612 = sin(r978611);
double r978613 = r978596 * r978612;
double r978614 = 5.3514152020060203e-79;
bool r978615 = r978581 <= r978614;
double r978616 = /* ERROR: no posit support in C */;
double r978617 = /* ERROR: no posit support in C */;
double r978618 = r978591 - r978617;
double r978619 = exp(r978618);
double r978620 = log(r978581);
double r978621 = r978620 * r978593;
double r978622 = r978597 + r978621;
double r978623 = sin(r978622);
double r978624 = r978619 * r978623;
double r978625 = 1.544354402853649e-16;
bool r978626 = r978581 <= r978625;
double r978627 = r978584 * r978620;
double r978628 = r978627 - r978594;
double r978629 = exp(r978628);
double r978630 = r978629 * r978623;
double r978631 = r978626 ? r978613 : r978630;
double r978632 = r978615 ? r978624 : r978631;
double r978633 = r978605 ? r978613 : r978632;
double r978634 = r978583 ? r978603 : r978633;
return r978634;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if x.im < -2.5472724614357004e-19Initial program 38.1
Taylor expanded around -inf 43.1
Simplified43.1
if -2.5472724614357004e-19 < x.im < 1.4263058830387834e-245 or 5.3514152020060203e-79 < x.im < 1.544354402853649e-16Initial program 27.1
rmApplied add-cube-cbrt27.1
if 1.4263058830387834e-245 < x.im < 5.3514152020060203e-79Initial program 27.1
Taylor expanded around 0 23.7
rmApplied insert-posit1627.1
if 1.544354402853649e-16 < x.im Initial program 38.2
Taylor expanded around 0 22.0
Taylor expanded around 0 5.8
Final simplification25.9
herbie shell --seed 2019146
(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)))))