Average Error: 34.0 → 8.9
Time: 5.0s
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 -2.83685348804351915 \cdot 10^{71}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -8.21218726880377109 \cdot 10^{-92}:\\ \;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\ \mathbf{elif}\;b \le -4.05237835825691163 \cdot 10^{-102}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 6.4051694544273952 \cdot 10^{145}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{b}{a}\\ \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 -2.83685348804351915 \cdot 10^{71}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le -8.21218726880377109 \cdot 10^{-92}:\\
\;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\

\mathbf{elif}\;b \le -4.05237835825691163 \cdot 10^{-102}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 6.4051694544273952 \cdot 10^{145}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\

\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\

\end{array}
double f(double a, double b, double c) {
        double r79640 = b;
        double r79641 = -r79640;
        double r79642 = r79640 * r79640;
        double r79643 = 4.0;
        double r79644 = a;
        double r79645 = c;
        double r79646 = r79644 * r79645;
        double r79647 = r79643 * r79646;
        double r79648 = r79642 - r79647;
        double r79649 = sqrt(r79648);
        double r79650 = r79641 - r79649;
        double r79651 = 2.0;
        double r79652 = r79651 * r79644;
        double r79653 = r79650 / r79652;
        return r79653;
}

double f(double a, double b, double c) {
        double r79654 = b;
        double r79655 = -2.836853488043519e+71;
        bool r79656 = r79654 <= r79655;
        double r79657 = -1.0;
        double r79658 = c;
        double r79659 = r79658 / r79654;
        double r79660 = r79657 * r79659;
        double r79661 = -8.212187268803771e-92;
        bool r79662 = r79654 <= r79661;
        double r79663 = 2.0;
        double r79664 = pow(r79654, r79663);
        double r79665 = r79664 - r79664;
        double r79666 = 4.0;
        double r79667 = a;
        double r79668 = r79667 * r79658;
        double r79669 = r79666 * r79668;
        double r79670 = r79665 + r79669;
        double r79671 = 2.0;
        double r79672 = r79671 * r79667;
        double r79673 = r79670 / r79672;
        double r79674 = -r79654;
        double r79675 = r79654 * r79654;
        double r79676 = r79675 - r79669;
        double r79677 = sqrt(r79676);
        double r79678 = r79674 + r79677;
        double r79679 = r79673 / r79678;
        double r79680 = -4.052378358256912e-102;
        bool r79681 = r79654 <= r79680;
        double r79682 = 6.405169454427395e+145;
        bool r79683 = r79654 <= r79682;
        double r79684 = 1.0;
        double r79685 = r79674 - r79677;
        double r79686 = r79672 / r79685;
        double r79687 = r79684 / r79686;
        double r79688 = r79654 / r79667;
        double r79689 = r79657 * r79688;
        double r79690 = r79683 ? r79687 : r79689;
        double r79691 = r79681 ? r79660 : r79690;
        double r79692 = r79662 ? r79679 : r79691;
        double r79693 = r79656 ? r79660 : r79692;
        return r79693;
}

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.0
Target20.7
Herbie8.9
\[\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 4 regimes
  2. if b < -2.836853488043519e+71 or -8.212187268803771e-92 < b < -4.052378358256912e-102

    1. Initial program 57.4

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

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

    if -2.836853488043519e+71 < b < -8.212187268803771e-92

    1. Initial program 42.3

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

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

      \[\leadsto \frac{1}{\color{blue}{\left(2 \cdot a\right) \cdot \frac{1}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}\]
    6. Applied associate-/r*42.3

      \[\leadsto \color{blue}{\frac{\frac{1}{2 \cdot a}}{\frac{1}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}\]
    7. Using strategy rm
    8. Applied flip--42.4

      \[\leadsto \frac{\frac{1}{2 \cdot a}}{\frac{1}{\color{blue}{\frac{\left(-b\right) \cdot \left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} \cdot \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}}\]
    9. Applied associate-/r/42.4

      \[\leadsto \frac{\frac{1}{2 \cdot a}}{\color{blue}{\frac{1}{\left(-b\right) \cdot \left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} \cdot \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}} \cdot \left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}}\]
    10. Applied associate-/r*42.4

      \[\leadsto \color{blue}{\frac{\frac{\frac{1}{2 \cdot a}}{\frac{1}{\left(-b\right) \cdot \left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} \cdot \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\]
    11. Simplified14.3

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

    if -4.052378358256912e-102 < b < 6.405169454427395e+145

    1. Initial program 11.4

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

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

    if 6.405169454427395e+145 < b

    1. Initial program 60.7

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

      \[\leadsto \color{blue}{\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}\]
    4. Taylor expanded around 0 2.7

      \[\leadsto \color{blue}{-1 \cdot \frac{b}{a}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification8.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.83685348804351915 \cdot 10^{71}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -8.21218726880377109 \cdot 10^{-92}:\\ \;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{2 \cdot a}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\ \mathbf{elif}\;b \le -4.05237835825691163 \cdot 10^{-102}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 6.4051694544273952 \cdot 10^{145}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{b}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2020049 
(FPCore (a b c)
  :name "quadm (p42, negative)"
  :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)))