Average Error: 34.0 → 9.5
Time: 9.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 -2.6487898413435469 \cdot 10^{-64}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 1.43504028250552318 \cdot 10^{146}:\\ \;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-b}{2 \cdot a} - 0.5 \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.6487898413435469 \cdot 10^{-64}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r114836 = b;
        double r114837 = -r114836;
        double r114838 = r114836 * r114836;
        double r114839 = 4.0;
        double r114840 = a;
        double r114841 = c;
        double r114842 = r114840 * r114841;
        double r114843 = r114839 * r114842;
        double r114844 = r114838 - r114843;
        double r114845 = sqrt(r114844);
        double r114846 = r114837 - r114845;
        double r114847 = 2.0;
        double r114848 = r114847 * r114840;
        double r114849 = r114846 / r114848;
        return r114849;
}

double f(double a, double b, double c) {
        double r114850 = b;
        double r114851 = -2.648789841343547e-64;
        bool r114852 = r114850 <= r114851;
        double r114853 = -1.0;
        double r114854 = c;
        double r114855 = r114854 / r114850;
        double r114856 = r114853 * r114855;
        double r114857 = 1.4350402825055232e+146;
        bool r114858 = r114850 <= r114857;
        double r114859 = -r114850;
        double r114860 = 2.0;
        double r114861 = a;
        double r114862 = r114860 * r114861;
        double r114863 = r114859 / r114862;
        double r114864 = r114850 * r114850;
        double r114865 = 4.0;
        double r114866 = r114861 * r114854;
        double r114867 = r114865 * r114866;
        double r114868 = r114864 - r114867;
        double r114869 = sqrt(r114868);
        double r114870 = r114869 / r114862;
        double r114871 = r114863 - r114870;
        double r114872 = 0.5;
        double r114873 = r114850 / r114861;
        double r114874 = r114872 * r114873;
        double r114875 = r114863 - r114874;
        double r114876 = r114858 ? r114871 : r114875;
        double r114877 = r114852 ? r114856 : r114876;
        return r114877;
}

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
Herbie9.5
\[\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 < -2.648789841343547e-64

    1. Initial program 53.8

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

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

    if -2.648789841343547e-64 < b < 1.4350402825055232e+146

    1. Initial program 12.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 div-sub12.4

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

    if 1.4350402825055232e+146 < b

    1. Initial program 60.9

      \[\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-sub60.9

      \[\leadsto \color{blue}{\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity60.9

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

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

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

      \[\leadsto \frac{-b}{2 \cdot a} - \color{blue}{0.5 \cdot \frac{b}{a}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification9.5

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

Reproduce

herbie shell --seed 2020049 +o rules:numerics
(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)))