Average Error: 33.3 → 6.4
Time: 1.4m
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -3.263941314600607 \cdot 10^{+152}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le -4.687918346756617 \cdot 10^{-254}:\\ \;\;\;\;\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} - b}{2 \cdot a}\\ \mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\ \;\;\;\;\frac{c \cdot -2}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} + b}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -3.263941314600607 \cdot 10^{+152}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\

\mathbf{elif}\;b \le -4.687918346756617 \cdot 10^{-254}:\\
\;\;\;\;\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} - b}{2 \cdot a}\\

\mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\
\;\;\;\;\frac{c \cdot -2}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} + b}\\

\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\

\end{array}
double f(double a, double b, double c) {
        double r30543503 = b;
        double r30543504 = -r30543503;
        double r30543505 = r30543503 * r30543503;
        double r30543506 = 4.0;
        double r30543507 = a;
        double r30543508 = r30543506 * r30543507;
        double r30543509 = c;
        double r30543510 = r30543508 * r30543509;
        double r30543511 = r30543505 - r30543510;
        double r30543512 = sqrt(r30543511);
        double r30543513 = r30543504 + r30543512;
        double r30543514 = 2.0;
        double r30543515 = r30543514 * r30543507;
        double r30543516 = r30543513 / r30543515;
        return r30543516;
}

double f(double a, double b, double c) {
        double r30543517 = b;
        double r30543518 = -3.263941314600607e+152;
        bool r30543519 = r30543517 <= r30543518;
        double r30543520 = c;
        double r30543521 = r30543520 / r30543517;
        double r30543522 = a;
        double r30543523 = r30543517 / r30543522;
        double r30543524 = r30543521 - r30543523;
        double r30543525 = -4.687918346756617e-254;
        bool r30543526 = r30543517 <= r30543525;
        double r30543527 = -4.0;
        double r30543528 = r30543522 * r30543527;
        double r30543529 = r30543520 * r30543528;
        double r30543530 = fma(r30543517, r30543517, r30543529);
        double r30543531 = sqrt(r30543530);
        double r30543532 = r30543531 - r30543517;
        double r30543533 = 2.0;
        double r30543534 = r30543533 * r30543522;
        double r30543535 = r30543532 / r30543534;
        double r30543536 = 3.463606471108268e+121;
        bool r30543537 = r30543517 <= r30543536;
        double r30543538 = -2.0;
        double r30543539 = r30543520 * r30543538;
        double r30543540 = r30543531 + r30543517;
        double r30543541 = r30543539 / r30543540;
        double r30543542 = -r30543521;
        double r30543543 = r30543537 ? r30543541 : r30543542;
        double r30543544 = r30543526 ? r30543535 : r30543543;
        double r30543545 = r30543519 ? r30543524 : r30543544;
        return r30543545;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.3
Target20.3
Herbie6.4
\[\begin{array}{l} \mathbf{if}\;b \lt 0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if b < -3.263941314600607e+152

    1. Initial program 60.1

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified60.1

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} - b}{2}}{a}}\]
    3. Taylor expanded around -inf 2.3

      \[\leadsto \color{blue}{\frac{c}{b} - \frac{b}{a}}\]

    if -3.263941314600607e+152 < b < -4.687918346756617e-254

    1. Initial program 7.8

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified7.8

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} - b}{2}}{a}}\]
    3. Using strategy rm
    4. Applied associate-/l/7.8

      \[\leadsto \color{blue}{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} - b}{a \cdot 2}}\]

    if -4.687918346756617e-254 < b < 3.463606471108268e+121

    1. Initial program 31.6

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified31.6

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} - b}{2}}{a}}\]
    3. Using strategy rm
    4. Applied flip--31.8

      \[\leadsto \frac{\frac{\color{blue}{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} \cdot \sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} - b \cdot b}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} + b}}}{2}}{a}\]
    5. Simplified15.5

      \[\leadsto \frac{\frac{\frac{\color{blue}{c \cdot \left(-4 \cdot a\right)}}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} + b}}{2}}{a}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity15.5

      \[\leadsto \frac{\frac{\frac{c \cdot \left(-4 \cdot a\right)}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} + b}}{2}}{\color{blue}{1 \cdot a}}\]
    8. Applied *-un-lft-identity15.5

      \[\leadsto \frac{\color{blue}{1 \cdot \frac{\frac{c \cdot \left(-4 \cdot a\right)}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} + b}}{2}}}{1 \cdot a}\]
    9. Applied times-frac15.5

      \[\leadsto \color{blue}{\frac{1}{1} \cdot \frac{\frac{\frac{c \cdot \left(-4 \cdot a\right)}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} + b}}{2}}{a}}\]
    10. Simplified15.5

      \[\leadsto \color{blue}{1} \cdot \frac{\frac{\frac{c \cdot \left(-4 \cdot a\right)}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} + b}}{2}}{a}\]
    11. Simplified8.7

      \[\leadsto 1 \cdot \color{blue}{\frac{-2 \cdot c}{b + \sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot -4\right) \cdot c\right)\right)}}}\]

    if 3.463606471108268e+121 < b

    1. Initial program 59.8

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Simplified59.8

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(-4 \cdot a\right)\right)\right)} - b}{2}}{a}}\]
    3. Taylor expanded around inf 2.3

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    4. Simplified2.3

      \[\leadsto \color{blue}{-\frac{c}{b}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification6.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.263941314600607 \cdot 10^{+152}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le -4.687918346756617 \cdot 10^{-254}:\\ \;\;\;\;\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} - b}{2 \cdot a}\\ \mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\ \;\;\;\;\frac{c \cdot -2}{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot \left(a \cdot -4\right)\right)\right)} + b}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019128 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r1)"

  :herbie-target
  (if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))

  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))