Average Error: 26.2 → 23.7
Time: 3.1s
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.002330886974353 \cdot 10^{-17} \lor \neg \left(y.re \le 3.4366687886863465 \cdot 10^{63}\right):\\ \;\;\;\;\frac{x.im}{\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}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.im}{\sqrt{y.re \cdot y.re + y.im \cdot 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.002330886974353 \cdot 10^{-17} \lor \neg \left(y.re \le 3.4366687886863465 \cdot 10^{63}\right):\\
\;\;\;\;\frac{x.im}{\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}\\

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

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r64418 = x_im;
        double r64419 = y_re;
        double r64420 = r64418 * r64419;
        double r64421 = x_re;
        double r64422 = y_im;
        double r64423 = r64421 * r64422;
        double r64424 = r64420 - r64423;
        double r64425 = r64419 * r64419;
        double r64426 = r64422 * r64422;
        double r64427 = r64425 + r64426;
        double r64428 = r64424 / r64427;
        return r64428;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r64429 = y_re;
        double r64430 = -4.002330886974353e-17;
        bool r64431 = r64429 <= r64430;
        double r64432 = 3.4366687886863465e+63;
        bool r64433 = r64429 <= r64432;
        double r64434 = !r64433;
        bool r64435 = r64431 || r64434;
        double r64436 = x_im;
        double r64437 = 2.0;
        double r64438 = pow(r64429, r64437);
        double r64439 = y_im;
        double r64440 = pow(r64439, r64437);
        double r64441 = r64438 + r64440;
        double r64442 = r64441 / r64429;
        double r64443 = r64436 / r64442;
        double r64444 = x_re;
        double r64445 = r64444 * r64439;
        double r64446 = r64429 * r64429;
        double r64447 = r64439 * r64439;
        double r64448 = r64446 + r64447;
        double r64449 = r64445 / r64448;
        double r64450 = r64443 - r64449;
        double r64451 = r64436 * r64429;
        double r64452 = r64451 / r64448;
        double r64453 = sqrt(r64448);
        double r64454 = r64444 / r64453;
        double r64455 = r64439 / r64453;
        double r64456 = r64454 * r64455;
        double r64457 = r64452 - r64456;
        double r64458 = r64435 ? r64450 : r64457;
        return r64458;
}

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.002330886974353e-17 or 3.4366687886863465e+63 < y.re

    1. Initial program 33.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-sub33.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*30.5

      \[\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. Simplified30.5

      \[\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}\]

    if -4.002330886974353e-17 < y.re < 3.4366687886863465e+63

    1. Initial program 19.0

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

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

      \[\leadsto \frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{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}}}\]
    6. Applied times-frac17.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.re \le -4.002330886974353 \cdot 10^{-17} \lor \neg \left(y.re \le 3.4366687886863465 \cdot 10^{63}\right):\\ \;\;\;\;\frac{x.im}{\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}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \end{array}\]

Reproduce

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