Average Error: 26.5 → 8.6
Time: 3.7s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\begin{array}{l} \mathbf{if}\;y.im \le -1.351214721549483218261281106569258966909 \cdot 10^{154} \lor \neg \left(y.im \le 8.000358861136643239312158095843514305232 \cdot 10^{153}\right):\\ \;\;\;\;\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\frac{{y.re}^{2}}{y.im} + y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\ \end{array}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\begin{array}{l}
\mathbf{if}\;y.im \le -1.351214721549483218261281106569258966909 \cdot 10^{154} \lor \neg \left(y.im \le 8.000358861136643239312158095843514305232 \cdot 10^{153}\right):\\
\;\;\;\;\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\frac{{y.re}^{2}}{y.im} + y.im}\\

\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r100478 = x_im;
        double r100479 = y_re;
        double r100480 = r100478 * r100479;
        double r100481 = x_re;
        double r100482 = y_im;
        double r100483 = r100481 * r100482;
        double r100484 = r100480 - r100483;
        double r100485 = r100479 * r100479;
        double r100486 = r100482 * r100482;
        double r100487 = r100485 + r100486;
        double r100488 = r100484 / r100487;
        return r100488;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r100489 = y_im;
        double r100490 = -1.3512147215494832e+154;
        bool r100491 = r100489 <= r100490;
        double r100492 = 8.000358861136643e+153;
        bool r100493 = r100489 <= r100492;
        double r100494 = !r100493;
        bool r100495 = r100491 || r100494;
        double r100496 = x_im;
        double r100497 = y_re;
        double r100498 = r100497 * r100497;
        double r100499 = r100489 * r100489;
        double r100500 = r100498 + r100499;
        double r100501 = r100500 / r100497;
        double r100502 = r100496 / r100501;
        double r100503 = x_re;
        double r100504 = 2.0;
        double r100505 = pow(r100497, r100504);
        double r100506 = r100505 / r100489;
        double r100507 = r100506 + r100489;
        double r100508 = r100503 / r100507;
        double r100509 = r100502 - r100508;
        double r100510 = pow(r100489, r100504);
        double r100511 = r100510 / r100497;
        double r100512 = r100497 + r100511;
        double r100513 = r100496 / r100512;
        double r100514 = r100500 / r100489;
        double r100515 = r100503 / r100514;
        double r100516 = r100513 - r100515;
        double r100517 = r100495 ? r100509 : r100516;
        return r100517;
}

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. Split input into 2 regimes
  2. if y.im < -1.3512147215494832e+154 or 8.000358861136643e+153 < y.im

    1. Initial program 46.6

      \[\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-sqrt46.6

      \[\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. Using strategy rm
    5. Applied div-sub46.6

      \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    6. Simplified46.4

      \[\leadsto \color{blue}{\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    7. Simplified45.3

      \[\leadsto \frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \color{blue}{\frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}}\]
    8. Taylor expanded around 0 16.8

      \[\leadsto \frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\color{blue}{\frac{{y.re}^{2}}{y.im} + y.im}}\]

    if -1.3512147215494832e+154 < y.im < 8.000358861136643e+153

    1. Initial program 18.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-sqrt18.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. Using strategy rm
    5. Applied div-sub18.8

      \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    6. Simplified17.0

      \[\leadsto \color{blue}{\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    7. Simplified15.2

      \[\leadsto \frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \color{blue}{\frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}}\]
    8. Taylor expanded around 0 5.4

      \[\leadsto \frac{x.im}{\color{blue}{y.re + \frac{{y.im}^{2}}{y.re}}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification8.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le -1.351214721549483218261281106569258966909 \cdot 10^{154} \lor \neg \left(y.im \le 8.000358861136643239312158095843514305232 \cdot 10^{153}\right):\\ \;\;\;\;\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\frac{{y.re}^{2}}{y.im} + y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\ \end{array}\]

Reproduce

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