Average Error: 26.5 → 16.2
Time: 3.6s
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.re \le -4.4263537617510411 \cdot 10^{138} \lor \neg \left(y.re \le 8.23624815355425478 \cdot 10^{-31}\right):\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{\frac{{y.re}^{2} + {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.re \le -4.4263537617510411 \cdot 10^{138} \lor \neg \left(y.re \le 8.23624815355425478 \cdot 10^{-31}\right):\\
\;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\

\mathbf{else}:\\
\;\;\;\;\frac{x.im}{\frac{{y.re}^{2} + {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 r60974 = x_im;
        double r60975 = y_re;
        double r60976 = r60974 * r60975;
        double r60977 = x_re;
        double r60978 = y_im;
        double r60979 = r60977 * r60978;
        double r60980 = r60976 - r60979;
        double r60981 = r60975 * r60975;
        double r60982 = r60978 * r60978;
        double r60983 = r60981 + r60982;
        double r60984 = r60980 / r60983;
        return r60984;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r60985 = y_re;
        double r60986 = -4.426353761751041e+138;
        bool r60987 = r60985 <= r60986;
        double r60988 = 8.236248153554255e-31;
        bool r60989 = r60985 <= r60988;
        double r60990 = !r60989;
        bool r60991 = r60987 || r60990;
        double r60992 = x_im;
        double r60993 = y_im;
        double r60994 = 2.0;
        double r60995 = pow(r60993, r60994);
        double r60996 = r60995 / r60985;
        double r60997 = r60985 + r60996;
        double r60998 = r60992 / r60997;
        double r60999 = x_re;
        double r61000 = r60999 * r60993;
        double r61001 = r60985 * r60985;
        double r61002 = r60993 * r60993;
        double r61003 = r61001 + r61002;
        double r61004 = r61000 / r61003;
        double r61005 = r60998 - r61004;
        double r61006 = pow(r60985, r60994);
        double r61007 = r61006 + r60995;
        double r61008 = r61007 / r60985;
        double r61009 = r60992 / r61008;
        double r61010 = r61003 / r60993;
        double r61011 = r60999 / r61010;
        double r61012 = r61009 - r61011;
        double r61013 = r60991 ? r61005 : r61012;
        return r61013;
}

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.re < -4.426353761751041e+138 or 8.236248153554255e-31 < y.re

    1. Initial program 34.9

      \[\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-sub34.9

      \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}}\]
    4. Using strategy rm
    5. Applied associate-/l*32.2

      \[\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}{y.re \cdot y.re + y.im \cdot y.im}\]
    6. Simplified32.2

      \[\leadsto \frac{x.im}{\color{blue}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    7. Taylor expanded around 0 15.5

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

    if -4.426353761751041e+138 < y.re < 8.236248153554255e-31

    1. Initial program 19.9

      \[\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-sub19.9

      \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}}\]
    4. Using strategy rm
    5. Applied associate-/l*19.3

      \[\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}{y.re \cdot y.re + y.im \cdot y.im}\]
    6. Simplified19.3

      \[\leadsto \frac{x.im}{\color{blue}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    7. Using strategy rm
    8. Applied associate-/l*16.7

      \[\leadsto \frac{x.im}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}} - \color{blue}{\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 simplification16.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.re \le -4.4263537617510411 \cdot 10^{138} \lor \neg \left(y.re \le 8.23624815355425478 \cdot 10^{-31}\right):\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{\frac{{y.re}^{2} + {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 2020060 
(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))))