Average Error: 25.8 → 25.8
Time: 15.8s
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 r2957887 = x_re;
        double r2957888 = y_re;
        double r2957889 = r2957887 * r2957888;
        double r2957890 = x_im;
        double r2957891 = y_im;
        double r2957892 = r2957890 * r2957891;
        double r2957893 = r2957889 + r2957892;
        double r2957894 = r2957888 * r2957888;
        double r2957895 = r2957891 * r2957891;
        double r2957896 = r2957894 + r2957895;
        double r2957897 = r2957893 / r2957896;
        return r2957897;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2957898 = 1.0;
        double r2957899 = y_re;
        double r2957900 = r2957899 * r2957899;
        double r2957901 = y_im;
        double r2957902 = r2957901 * r2957901;
        double r2957903 = r2957900 + r2957902;
        double r2957904 = sqrt(r2957903);
        double r2957905 = r2957898 / r2957904;
        double r2957906 = x_im;
        double r2957907 = r2957906 * r2957901;
        double r2957908 = x_re;
        double r2957909 = r2957908 * r2957899;
        double r2957910 = r2957907 + r2957909;
        double r2957911 = r2957905 * r2957910;
        double r2957912 = r2957911 / r2957904;
        return r2957912;
}

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))))