Average Error: 34.6 → 11.3
Time: 18.4s
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 -5.087625860505018381828444417067874036646 \cdot 10^{-135}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 0.01064842317658122247681085070780682144687:\\ \;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \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 -5.087625860505018381828444417067874036646 \cdot 10^{-135}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 0.01064842317658122247681085070780682144687:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{2 \cdot a}\\

\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

\end{array}
double f(double a, double b, double c) {
        double r70658 = b;
        double r70659 = -r70658;
        double r70660 = r70658 * r70658;
        double r70661 = 4.0;
        double r70662 = a;
        double r70663 = c;
        double r70664 = r70662 * r70663;
        double r70665 = r70661 * r70664;
        double r70666 = r70660 - r70665;
        double r70667 = sqrt(r70666);
        double r70668 = r70659 - r70667;
        double r70669 = 2.0;
        double r70670 = r70669 * r70662;
        double r70671 = r70668 / r70670;
        return r70671;
}

double f(double a, double b, double c) {
        double r70672 = b;
        double r70673 = -5.0876258605050184e-135;
        bool r70674 = r70672 <= r70673;
        double r70675 = -1.0;
        double r70676 = c;
        double r70677 = r70676 / r70672;
        double r70678 = r70675 * r70677;
        double r70679 = 0.010648423176581222;
        bool r70680 = r70672 <= r70679;
        double r70681 = -r70672;
        double r70682 = 2.0;
        double r70683 = a;
        double r70684 = r70682 * r70683;
        double r70685 = r70681 / r70684;
        double r70686 = r70672 * r70672;
        double r70687 = r70683 * r70676;
        double r70688 = 4.0;
        double r70689 = r70687 * r70688;
        double r70690 = r70686 - r70689;
        double r70691 = sqrt(r70690);
        double r70692 = r70691 / r70684;
        double r70693 = r70685 - r70692;
        double r70694 = 1.0;
        double r70695 = r70672 / r70683;
        double r70696 = r70677 - r70695;
        double r70697 = r70694 * r70696;
        double r70698 = r70680 ? r70693 : r70697;
        double r70699 = r70674 ? r70678 : r70698;
        return r70699;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original34.6
Target21.1
Herbie11.3
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \mathbf{else}:\\ \;\;\;\;\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 3 regimes
  2. if b < -5.0876258605050184e-135

    1. Initial program 50.7

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Taylor expanded around -inf 11.7

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

    if -5.0876258605050184e-135 < b < 0.010648423176581222

    1. Initial program 13.2

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied div-sub13.2

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

      \[\leadsto \frac{-b}{2 \cdot a} - \color{blue}{\frac{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{2 \cdot a}}\]
    5. Using strategy rm
    6. Applied pow113.2

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

    if 0.010648423176581222 < b

    1. Initial program 32.9

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Taylor expanded around inf 8.1

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

      \[\leadsto \color{blue}{1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification11.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -5.087625860505018381828444417067874036646 \cdot 10^{-135}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 0.01064842317658122247681085070780682144687:\\ \;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019305 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r2)"
  :precision binary64

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

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