\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{\frac{\sqrt[3]{x.im \cdot y.re - x.re \cdot y.im} \cdot \sqrt[3]{x.im \cdot y.re - x.re \cdot y.im}}{\mathsf{hypot}\left(y.re, y.im\right)}}{\frac{\mathsf{hypot}\left(y.re, y.im\right)}{\sqrt[3]{x.im \cdot y.re - x.re \cdot y.im}}}double f(double x_re, double x_im, double y_re, double y_im) {
double r5317842 = x_im;
double r5317843 = y_re;
double r5317844 = r5317842 * r5317843;
double r5317845 = x_re;
double r5317846 = y_im;
double r5317847 = r5317845 * r5317846;
double r5317848 = r5317844 - r5317847;
double r5317849 = r5317843 * r5317843;
double r5317850 = r5317846 * r5317846;
double r5317851 = r5317849 + r5317850;
double r5317852 = r5317848 / r5317851;
return r5317852;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r5317853 = x_im;
double r5317854 = y_re;
double r5317855 = r5317853 * r5317854;
double r5317856 = x_re;
double r5317857 = y_im;
double r5317858 = r5317856 * r5317857;
double r5317859 = r5317855 - r5317858;
double r5317860 = cbrt(r5317859);
double r5317861 = r5317860 * r5317860;
double r5317862 = hypot(r5317854, r5317857);
double r5317863 = r5317861 / r5317862;
double r5317864 = r5317862 / r5317860;
double r5317865 = r5317863 / r5317864;
return r5317865;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.4
Simplified26.4
rmApplied add-sqr-sqrt26.4
Applied associate-/r*26.3
rmApplied *-un-lft-identity26.3
Applied add-cube-cbrt26.8
Applied times-frac26.8
Applied associate-/l*26.9
Simplified23.7
rmApplied associate-/r*17.6
Simplified17.6
Final simplification17.6
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))