Average Error: 26.1 → 26.1
Time: 3.4s
Precision: 64
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{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{x.re \cdot y.re + x.im \cdot y.im}{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}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r46589 = x_re;
        double r46590 = y_re;
        double r46591 = r46589 * r46590;
        double r46592 = x_im;
        double r46593 = y_im;
        double r46594 = r46592 * r46593;
        double r46595 = r46591 + r46594;
        double r46596 = r46590 * r46590;
        double r46597 = r46593 * r46593;
        double r46598 = r46596 + r46597;
        double r46599 = r46595 / r46598;
        return r46599;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r46600 = x_re;
        double r46601 = y_re;
        double r46602 = r46600 * r46601;
        double r46603 = x_im;
        double r46604 = y_im;
        double r46605 = r46603 * r46604;
        double r46606 = r46602 + r46605;
        double r46607 = r46601 * r46601;
        double r46608 = r46604 * r46604;
        double r46609 = r46607 + r46608;
        double r46610 = r46606 / r46609;
        return r46610;
}

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. Final simplification26.1

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

Reproduce

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