Average Error: 25.8 → 25.8
Time: 13.9s
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 r1488655 = x_im;
        double r1488656 = y_re;
        double r1488657 = r1488655 * r1488656;
        double r1488658 = x_re;
        double r1488659 = y_im;
        double r1488660 = r1488658 * r1488659;
        double r1488661 = r1488657 - r1488660;
        double r1488662 = r1488656 * r1488656;
        double r1488663 = r1488659 * r1488659;
        double r1488664 = r1488662 + r1488663;
        double r1488665 = r1488661 / r1488664;
        return r1488665;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1488666 = 1.0;
        double r1488667 = y_re;
        double r1488668 = r1488667 * r1488667;
        double r1488669 = y_im;
        double r1488670 = r1488669 * r1488669;
        double r1488671 = r1488668 + r1488670;
        double r1488672 = sqrt(r1488671);
        double r1488673 = r1488666 / r1488672;
        double r1488674 = x_im;
        double r1488675 = r1488674 * r1488667;
        double r1488676 = x_re;
        double r1488677 = r1488676 * r1488669;
        double r1488678 = r1488675 - r1488677;
        double r1488679 = r1488678 / r1488672;
        double r1488680 = r1488673 * r1488679;
        return r1488680;
}

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

    \[\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.8

    \[\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.8

    \[\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.8

    \[\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.8

    \[\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 2019155 
(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))))