Average Error: 25.4 → 25.5
Time: 46.0s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \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.re - x.re \cdot y.im\right)\]
\frac{x.im \cdot y.re - x.re \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.re - x.re \cdot y.im\right)
double f(double x_re, double x_im, double y_re, double y_im) {
        double r3257639 = x_im;
        double r3257640 = y_re;
        double r3257641 = r3257639 * r3257640;
        double r3257642 = x_re;
        double r3257643 = y_im;
        double r3257644 = r3257642 * r3257643;
        double r3257645 = r3257641 - r3257644;
        double r3257646 = r3257640 * r3257640;
        double r3257647 = r3257643 * r3257643;
        double r3257648 = r3257646 + r3257647;
        double r3257649 = r3257645 / r3257648;
        return r3257649;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3257650 = 1.0;
        double r3257651 = y_re;
        double r3257652 = r3257651 * r3257651;
        double r3257653 = y_im;
        double r3257654 = r3257653 * r3257653;
        double r3257655 = r3257652 + r3257654;
        double r3257656 = r3257650 / r3257655;
        double r3257657 = x_im;
        double r3257658 = r3257657 * r3257651;
        double r3257659 = x_re;
        double r3257660 = r3257659 * r3257653;
        double r3257661 = r3257658 - r3257660;
        double r3257662 = r3257656 * r3257661;
        return r3257662;
}

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

    \[\frac{x.im \cdot y.re - x.re \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.im \cdot y.re - x.re \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.re - x.re \cdot y.im\right)\]

Reproduce

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