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.0:\\
\;\;\;\;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}:\\
\;\;\;\;\frac{{\left(\mathsf{hypot}\left(x.re, x.im\right)\right)}^{y.re} \cdot \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right)\right)\right) \cdot \cos \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right) + \cos \left(\log \left(\mathsf{hypot}\left(x.re, x.im\right)\right) \cdot y.im\right) \cdot \sin \left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\right)}{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 r19819 = x_re;
double r19820 = r19819 * r19819;
double r19821 = x_im;
double r19822 = r19821 * r19821;
double r19823 = r19820 + r19822;
double r19824 = sqrt(r19823);
double r19825 = log(r19824);
double r19826 = y_re;
double r19827 = r19825 * r19826;
double r19828 = atan2(r19821, r19819);
double r19829 = y_im;
double r19830 = r19828 * r19829;
double r19831 = r19827 - r19830;
double r19832 = exp(r19831);
double r19833 = r19825 * r19829;
double r19834 = r19828 * r19826;
double r19835 = r19833 + r19834;
double r19836 = sin(r19835);
double r19837 = r19832 * r19836;
return r19837;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r19838 = x_re;
double r19839 = r19838 * r19838;
double r19840 = x_im;
double r19841 = r19840 * r19840;
double r19842 = r19839 + r19841;
double r19843 = sqrt(r19842);
double r19844 = log(r19843);
double r19845 = y_re;
double r19846 = r19844 * r19845;
double r19847 = atan2(r19840, r19838);
double r19848 = y_im;
double r19849 = r19847 * r19848;
double r19850 = r19846 - r19849;
double r19851 = exp(r19850);
double r19852 = r19844 * r19848;
double r19853 = r19847 * r19845;
double r19854 = r19852 + r19853;
double r19855 = sin(r19854);
double r19856 = r19851 * r19855;
double r19857 = -0.0;
bool r19858 = r19856 <= r19857;
double r19859 = hypot(r19838, r19840);
double r19860 = pow(r19859, r19845);
double r19861 = log(r19859);
double r19862 = r19861 * r19848;
double r19863 = sin(r19862);
double r19864 = expm1(r19863);
double r19865 = log1p(r19864);
double r19866 = cos(r19853);
double r19867 = r19865 * r19866;
double r19868 = cos(r19862);
double r19869 = sin(r19853);
double r19870 = r19868 * r19869;
double r19871 = r19867 + r19870;
double r19872 = r19860 * r19871;
double r19873 = exp(r19849);
double r19874 = r19872 / r19873;
double r19875 = r19858 ? r19856 : r19874;
return r19875;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
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.0Initial program 2.0
if -0.0 < (* (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 53.6
Simplified8.6
rmApplied fma-udef8.6
Applied sin-sum8.6
rmApplied log1p-expm1-u8.6
Final simplification6.0
herbie shell --seed 2020045 +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)))))