Average Error: 33.3 → 6.4
Time: 2.1m
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{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{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}{a}\\ \mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\ \;\;\;\;\frac{\frac{c}{\frac{-1}{2}}}{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot -4\right) \cdot c\right)\right)} + b}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{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{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}{a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r13501546 = b;
        double r13501547 = -r13501546;
        double r13501548 = r13501546 * r13501546;
        double r13501549 = 4.0;
        double r13501550 = a;
        double r13501551 = c;
        double r13501552 = r13501550 * r13501551;
        double r13501553 = r13501549 * r13501552;
        double r13501554 = r13501548 - r13501553;
        double r13501555 = sqrt(r13501554);
        double r13501556 = r13501547 + r13501555;
        double r13501557 = 2.0;
        double r13501558 = r13501557 * r13501550;
        double r13501559 = r13501556 / r13501558;
        return r13501559;
}

double f(double a, double b, double c) {
        double r13501560 = b;
        double r13501561 = -3.263941314600607e+152;
        bool r13501562 = r13501560 <= r13501561;
        double r13501563 = c;
        double r13501564 = r13501563 / r13501560;
        double r13501565 = a;
        double r13501566 = r13501560 / r13501565;
        double r13501567 = r13501564 - r13501566;
        double r13501568 = -4.687918346756617e-254;
        bool r13501569 = r13501560 <= r13501568;
        double r13501570 = r13501563 * r13501565;
        double r13501571 = -4.0;
        double r13501572 = r13501560 * r13501560;
        double r13501573 = fma(r13501570, r13501571, r13501572);
        double r13501574 = sqrt(r13501573);
        double r13501575 = r13501574 - r13501560;
        double r13501576 = 2.0;
        double r13501577 = r13501575 / r13501576;
        double r13501578 = r13501577 / r13501565;
        double r13501579 = 3.463606471108268e+121;
        bool r13501580 = r13501560 <= r13501579;
        double r13501581 = -0.5;
        double r13501582 = r13501563 / r13501581;
        double r13501583 = r13501565 * r13501571;
        double r13501584 = r13501583 * r13501563;
        double r13501585 = fma(r13501560, r13501560, r13501584);
        double r13501586 = sqrt(r13501585);
        double r13501587 = r13501586 + r13501560;
        double r13501588 = r13501582 / r13501587;
        double r13501589 = -r13501564;
        double r13501590 = r13501580 ? r13501588 : r13501589;
        double r13501591 = r13501569 ? r13501578 : r13501590;
        double r13501592 = r13501562 ? r13501567 : r13501591;
        return r13501592;
}

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 - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{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 - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified60.1

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot c\right) \cdot -4\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 - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified7.8

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

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

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

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

    1. Initial program 31.6

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

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

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

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

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

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

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

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

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

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

      \[\leadsto 1 \cdot \color{blue}{\frac{\frac{c}{\frac{-1}{2}}}{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 - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified59.8

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot c\right) \cdot -4\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{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}{a}\\ \mathbf{elif}\;b \le 3.463606471108268 \cdot 10^{+121}:\\ \;\;\;\;\frac{\frac{c}{\frac{-1}{2}}}{\sqrt{\mathsf{fma}\left(b, b, \left(\left(a \cdot -4\right) \cdot c\right)\right)} + b}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019128 +o rules:numerics
(FPCore (a b c)
  :name "quadp (p42, positive)"

  :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)))