Average Error: 26.1 → 26.0
Time: 12.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{y.re \cdot x.re + x.im \cdot y.im}{\sqrt{{y.im}^{2} + y.re \cdot y.re}}}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\]
\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{\frac{y.re \cdot x.re + x.im \cdot y.im}{\sqrt{{y.im}^{2} + y.re \cdot y.re}}}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r41790 = x_re;
        double r41791 = y_re;
        double r41792 = r41790 * r41791;
        double r41793 = x_im;
        double r41794 = y_im;
        double r41795 = r41793 * r41794;
        double r41796 = r41792 + r41795;
        double r41797 = r41791 * r41791;
        double r41798 = r41794 * r41794;
        double r41799 = r41797 + r41798;
        double r41800 = r41796 / r41799;
        return r41800;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r41801 = y_re;
        double r41802 = x_re;
        double r41803 = r41801 * r41802;
        double r41804 = x_im;
        double r41805 = y_im;
        double r41806 = r41804 * r41805;
        double r41807 = r41803 + r41806;
        double r41808 = 2.0;
        double r41809 = pow(r41805, r41808);
        double r41810 = r41801 * r41801;
        double r41811 = r41809 + r41810;
        double r41812 = sqrt(r41811);
        double r41813 = r41807 / r41812;
        double r41814 = r41805 * r41805;
        double r41815 = r41814 + r41810;
        double r41816 = sqrt(r41815);
        double r41817 = r41813 / r41816;
        return r41817;
}

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 26.1

    \[\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-sqrt26.1

    \[\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*26.0

    \[\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. Simplified26.0

    \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.im + y.re \cdot x.re}{\sqrt{y.re \cdot y.re + {y.im}^{2}}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  6. Final simplification26.0

    \[\leadsto \frac{\frac{y.re \cdot x.re + x.im \cdot y.im}{\sqrt{{y.im}^{2} + y.re \cdot y.re}}}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\]

Reproduce

herbie shell --seed 2019179 
(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))))