Average Error: 25.3 → 25.5
Time: 35.6s
Precision: 64
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{1}{y.re \cdot y.re + y.im \cdot y.im} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)\]
\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{1}{y.re \cdot y.re + y.im \cdot y.im} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)
double f(double x_re, double x_im, double y_re, double y_im) {
        double r5576787 = x_re;
        double r5576788 = y_re;
        double r5576789 = r5576787 * r5576788;
        double r5576790 = x_im;
        double r5576791 = y_im;
        double r5576792 = r5576790 * r5576791;
        double r5576793 = r5576789 + r5576792;
        double r5576794 = r5576788 * r5576788;
        double r5576795 = r5576791 * r5576791;
        double r5576796 = r5576794 + r5576795;
        double r5576797 = r5576793 / r5576796;
        return r5576797;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r5576798 = 1.0;
        double r5576799 = y_re;
        double r5576800 = r5576799 * r5576799;
        double r5576801 = y_im;
        double r5576802 = r5576801 * r5576801;
        double r5576803 = r5576800 + r5576802;
        double r5576804 = r5576798 / r5576803;
        double r5576805 = x_im;
        double r5576806 = r5576805 * r5576801;
        double r5576807 = x_re;
        double r5576808 = r5576807 * r5576799;
        double r5576809 = r5576806 + r5576808;
        double r5576810 = r5576804 * r5576809;
        return r5576810;
}

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.3

    \[\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 div-inv25.5

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

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

Reproduce

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