Average Error: 25.8 → 25.8
Time: 15.5s
Precision: 64
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r3050845 = x_re;
        double r3050846 = y_re;
        double r3050847 = r3050845 * r3050846;
        double r3050848 = x_im;
        double r3050849 = y_im;
        double r3050850 = r3050848 * r3050849;
        double r3050851 = r3050847 + r3050850;
        double r3050852 = r3050846 * r3050846;
        double r3050853 = r3050849 * r3050849;
        double r3050854 = r3050852 + r3050853;
        double r3050855 = r3050851 / r3050854;
        return r3050855;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3050856 = 1.0;
        double r3050857 = y_re;
        double r3050858 = r3050857 * r3050857;
        double r3050859 = y_im;
        double r3050860 = r3050859 * r3050859;
        double r3050861 = r3050858 + r3050860;
        double r3050862 = sqrt(r3050861);
        double r3050863 = r3050856 / r3050862;
        double r3050864 = x_im;
        double r3050865 = r3050864 * r3050859;
        double r3050866 = x_re;
        double r3050867 = r3050866 * r3050857;
        double r3050868 = r3050865 + r3050867;
        double r3050869 = r3050863 * r3050868;
        double r3050870 = r3050869 / r3050862;
        return r3050870;
}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 25.8

    \[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt25.8

    \[\leadsto \frac{x.re \cdot y.re + x.im \cdot y.im}{\color{blue}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  4. Applied associate-/r*25.7

    \[\leadsto \color{blue}{\frac{\frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  5. Using strategy rm
  6. Applied div-inv25.8

    \[\leadsto \frac{\color{blue}{\left(x.re \cdot y.re + x.im \cdot y.im\right) \cdot \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  7. Final simplification25.8

    \[\leadsto \frac{\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]

Reproduce

herbie shell --seed 2019163 
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, real part"
  (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))