Average Error: 25.7 → 25.7
Time: 15.1s
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}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.re - x.re \cdot y.im}{\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 r2503361 = x_im;
        double r2503362 = y_re;
        double r2503363 = r2503361 * r2503362;
        double r2503364 = x_re;
        double r2503365 = y_im;
        double r2503366 = r2503364 * r2503365;
        double r2503367 = r2503363 - r2503366;
        double r2503368 = r2503362 * r2503362;
        double r2503369 = r2503365 * r2503365;
        double r2503370 = r2503368 + r2503369;
        double r2503371 = r2503367 / r2503370;
        return r2503371;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2503372 = 1.0;
        double r2503373 = y_re;
        double r2503374 = r2503373 * r2503373;
        double r2503375 = y_im;
        double r2503376 = r2503375 * r2503375;
        double r2503377 = r2503374 + r2503376;
        double r2503378 = sqrt(r2503377);
        double r2503379 = r2503372 / r2503378;
        double r2503380 = x_im;
        double r2503381 = r2503380 * r2503373;
        double r2503382 = x_re;
        double r2503383 = r2503382 * r2503375;
        double r2503384 = r2503381 - r2503383;
        double r2503385 = r2503384 / r2503378;
        double r2503386 = r2503379 * r2503385;
        return r2503386;
}

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

    \[\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 add-sqr-sqrt25.7

    \[\leadsto \frac{x.im \cdot y.re - x.re \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 *-un-lft-identity25.7

    \[\leadsto \frac{\color{blue}{1 \cdot \left(x.im \cdot y.re - x.re \cdot y.im\right)}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  5. Applied times-frac25.7

    \[\leadsto \color{blue}{\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  6. Final simplification25.7

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

Reproduce

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