Average Error: 26.5 → 4.3
Time: 11.5s
Precision: 64
\[\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\]
\[\begin{array}{l} \mathbf{if}\;b \le -61.10607895990863625002020853571593761444 \lor \neg \left(b \le 1.310939369483501924587354661839021785547 \cdot 10^{-16}\right):\\ \;\;\;\;\frac{b}{c + \frac{d}{\frac{c}{d}}} - \frac{a}{d + \frac{c \cdot c}{d}}\\ \mathbf{else}:\\ \;\;\;\;\frac{b}{\frac{d \cdot d}{c} + c} - \frac{a}{d + c \cdot \frac{c}{d}}\\ \end{array}\]
\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}
\begin{array}{l}
\mathbf{if}\;b \le -61.10607895990863625002020853571593761444 \lor \neg \left(b \le 1.310939369483501924587354661839021785547 \cdot 10^{-16}\right):\\
\;\;\;\;\frac{b}{c + \frac{d}{\frac{c}{d}}} - \frac{a}{d + \frac{c \cdot c}{d}}\\

\mathbf{else}:\\
\;\;\;\;\frac{b}{\frac{d \cdot d}{c} + c} - \frac{a}{d + c \cdot \frac{c}{d}}\\

\end{array}
double f(double a, double b, double c, double d) {
        double r59245 = b;
        double r59246 = c;
        double r59247 = r59245 * r59246;
        double r59248 = a;
        double r59249 = d;
        double r59250 = r59248 * r59249;
        double r59251 = r59247 - r59250;
        double r59252 = r59246 * r59246;
        double r59253 = r59249 * r59249;
        double r59254 = r59252 + r59253;
        double r59255 = r59251 / r59254;
        return r59255;
}

double f(double a, double b, double c, double d) {
        double r59256 = b;
        double r59257 = -61.106078959908636;
        bool r59258 = r59256 <= r59257;
        double r59259 = 1.310939369483502e-16;
        bool r59260 = r59256 <= r59259;
        double r59261 = !r59260;
        bool r59262 = r59258 || r59261;
        double r59263 = c;
        double r59264 = d;
        double r59265 = r59263 / r59264;
        double r59266 = r59264 / r59265;
        double r59267 = r59263 + r59266;
        double r59268 = r59256 / r59267;
        double r59269 = a;
        double r59270 = r59263 * r59263;
        double r59271 = r59270 / r59264;
        double r59272 = r59264 + r59271;
        double r59273 = r59269 / r59272;
        double r59274 = r59268 - r59273;
        double r59275 = r59264 * r59264;
        double r59276 = r59275 / r59263;
        double r59277 = r59276 + r59263;
        double r59278 = r59256 / r59277;
        double r59279 = r59263 * r59265;
        double r59280 = r59264 + r59279;
        double r59281 = r59269 / r59280;
        double r59282 = r59278 - r59281;
        double r59283 = r59262 ? r59274 : r59282;
        return r59283;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus d

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original26.5
Target0.4
Herbie4.3
\[\begin{array}{l} \mathbf{if}\;\left|d\right| \lt \left|c\right|:\\ \;\;\;\;\frac{b - a \cdot \frac{d}{c}}{c + d \cdot \frac{d}{c}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-a\right) + b \cdot \frac{c}{d}}{d + c \cdot \frac{c}{d}}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if b < -61.106078959908636 or 1.310939369483502e-16 < b

    1. Initial program 32.8

      \[\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\]
    2. Using strategy rm
    3. Applied div-sub32.8

      \[\leadsto \color{blue}{\frac{b \cdot c}{c \cdot c + d \cdot d} - \frac{a \cdot d}{c \cdot c + d \cdot d}}\]
    4. Simplified30.2

      \[\leadsto \color{blue}{\frac{b}{\frac{d \cdot d + c \cdot c}{c}}} - \frac{a \cdot d}{c \cdot c + d \cdot d}\]
    5. Simplified28.4

      \[\leadsto \frac{b}{\frac{d \cdot d + c \cdot c}{c}} - \color{blue}{\frac{a}{\frac{d \cdot d + c \cdot c}{d}}}\]
    6. Taylor expanded around 0 16.0

      \[\leadsto \frac{b}{\color{blue}{\frac{{d}^{2}}{c} + c}} - \frac{a}{\frac{d \cdot d + c \cdot c}{d}}\]
    7. Simplified16.0

      \[\leadsto \frac{b}{\color{blue}{c + \frac{d \cdot d}{c}}} - \frac{a}{\frac{d \cdot d + c \cdot c}{d}}\]
    8. Taylor expanded around 0 8.8

      \[\leadsto \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\color{blue}{\frac{{c}^{2}}{d} + d}}\]
    9. Simplified8.8

      \[\leadsto \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\color{blue}{\frac{c \cdot c}{d} + d}}\]
    10. Using strategy rm
    11. Applied *-un-lft-identity8.8

      \[\leadsto \frac{b}{\color{blue}{1 \cdot \left(c + \frac{d \cdot d}{c}\right)}} - \frac{a}{\frac{c \cdot c}{d} + d}\]
    12. Applied *-un-lft-identity8.8

      \[\leadsto \frac{\color{blue}{1 \cdot b}}{1 \cdot \left(c + \frac{d \cdot d}{c}\right)} - \frac{a}{\frac{c \cdot c}{d} + d}\]
    13. Applied times-frac8.8

      \[\leadsto \color{blue}{\frac{1}{1} \cdot \frac{b}{c + \frac{d \cdot d}{c}}} - \frac{a}{\frac{c \cdot c}{d} + d}\]
    14. Simplified8.8

      \[\leadsto \color{blue}{1} \cdot \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\frac{c \cdot c}{d} + d}\]
    15. Simplified4.9

      \[\leadsto 1 \cdot \color{blue}{\frac{b}{\frac{d}{\frac{c}{d}} + c}} - \frac{a}{\frac{c \cdot c}{d} + d}\]

    if -61.106078959908636 < b < 1.310939369483502e-16

    1. Initial program 20.2

      \[\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\]
    2. Using strategy rm
    3. Applied div-sub20.2

      \[\leadsto \color{blue}{\frac{b \cdot c}{c \cdot c + d \cdot d} - \frac{a \cdot d}{c \cdot c + d \cdot d}}\]
    4. Simplified19.7

      \[\leadsto \color{blue}{\frac{b}{\frac{d \cdot d + c \cdot c}{c}}} - \frac{a \cdot d}{c \cdot c + d \cdot d}\]
    5. Simplified18.3

      \[\leadsto \frac{b}{\frac{d \cdot d + c \cdot c}{c}} - \color{blue}{\frac{a}{\frac{d \cdot d + c \cdot c}{d}}}\]
    6. Taylor expanded around 0 15.8

      \[\leadsto \frac{b}{\color{blue}{\frac{{d}^{2}}{c} + c}} - \frac{a}{\frac{d \cdot d + c \cdot c}{d}}\]
    7. Simplified15.8

      \[\leadsto \frac{b}{\color{blue}{c + \frac{d \cdot d}{c}}} - \frac{a}{\frac{d \cdot d + c \cdot c}{d}}\]
    8. Taylor expanded around 0 7.3

      \[\leadsto \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\color{blue}{\frac{{c}^{2}}{d} + d}}\]
    9. Simplified7.3

      \[\leadsto \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\color{blue}{\frac{c \cdot c}{d} + d}}\]
    10. Using strategy rm
    11. Applied *-un-lft-identity7.3

      \[\leadsto \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\frac{c \cdot c}{\color{blue}{1 \cdot d}} + d}\]
    12. Applied times-frac3.8

      \[\leadsto \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\color{blue}{\frac{c}{1} \cdot \frac{c}{d}} + d}\]
    13. Simplified3.8

      \[\leadsto \frac{b}{c + \frac{d \cdot d}{c}} - \frac{a}{\color{blue}{c} \cdot \frac{c}{d} + d}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -61.10607895990863625002020853571593761444 \lor \neg \left(b \le 1.310939369483501924587354661839021785547 \cdot 10^{-16}\right):\\ \;\;\;\;\frac{b}{c + \frac{d}{\frac{c}{d}}} - \frac{a}{d + \frac{c \cdot c}{d}}\\ \mathbf{else}:\\ \;\;\;\;\frac{b}{\frac{d \cdot d}{c} + c} - \frac{a}{d + c \cdot \frac{c}{d}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019196 
(FPCore (a b c d)
  :name "Complex division, imag part"

  :herbie-target
  (if (< (fabs d) (fabs c)) (/ (- b (* a (/ d c))) (+ c (* d (/ d c)))) (/ (+ (- a) (* b (/ c d))) (+ d (* c (/ c d)))))

  (/ (- (* b c) (* a d)) (+ (* c c) (* d d))))