Average Error: 33.6 → 11.3
Time: 25.6s
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 -1.2890050783826923 \cdot 10^{-183}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \mathbf{elif}\;b \le 1.786204067849289 \cdot 10^{+100}:\\ \;\;\;\;\frac{\frac{1}{a} \cdot \left(\left(-b\right) - \sqrt{\left(a \cdot -4\right) \cdot c + b \cdot b}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\left(\frac{a}{\frac{b}{c}} - b\right) \cdot 2}{a}}{2}\\ \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 -1.2890050783826923 \cdot 10^{-183}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r1229001 = b;
        double r1229002 = -r1229001;
        double r1229003 = r1229001 * r1229001;
        double r1229004 = 4.0;
        double r1229005 = a;
        double r1229006 = c;
        double r1229007 = r1229005 * r1229006;
        double r1229008 = r1229004 * r1229007;
        double r1229009 = r1229003 - r1229008;
        double r1229010 = sqrt(r1229009);
        double r1229011 = r1229002 - r1229010;
        double r1229012 = 2.0;
        double r1229013 = r1229012 * r1229005;
        double r1229014 = r1229011 / r1229013;
        return r1229014;
}

double f(double a, double b, double c) {
        double r1229015 = b;
        double r1229016 = -1.2890050783826923e-183;
        bool r1229017 = r1229015 <= r1229016;
        double r1229018 = -2.0;
        double r1229019 = c;
        double r1229020 = r1229019 / r1229015;
        double r1229021 = r1229018 * r1229020;
        double r1229022 = 2.0;
        double r1229023 = r1229021 / r1229022;
        double r1229024 = 1.786204067849289e+100;
        bool r1229025 = r1229015 <= r1229024;
        double r1229026 = 1.0;
        double r1229027 = a;
        double r1229028 = r1229026 / r1229027;
        double r1229029 = -r1229015;
        double r1229030 = -4.0;
        double r1229031 = r1229027 * r1229030;
        double r1229032 = r1229031 * r1229019;
        double r1229033 = r1229015 * r1229015;
        double r1229034 = r1229032 + r1229033;
        double r1229035 = sqrt(r1229034);
        double r1229036 = r1229029 - r1229035;
        double r1229037 = r1229028 * r1229036;
        double r1229038 = r1229037 / r1229022;
        double r1229039 = r1229015 / r1229019;
        double r1229040 = r1229027 / r1229039;
        double r1229041 = r1229040 - r1229015;
        double r1229042 = r1229041 * r1229022;
        double r1229043 = r1229042 / r1229027;
        double r1229044 = r1229043 / r1229022;
        double r1229045 = r1229025 ? r1229038 : r1229044;
        double r1229046 = r1229017 ? r1229023 : r1229045;
        return r1229046;
}

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

Original33.6
Target20.5
Herbie11.3
\[\begin{array}{l} \mathbf{if}\;b \lt 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 < -1.2890050783826923e-183

    1. Initial program 48.2

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

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

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{\color{blue}{\left(-4 \cdot a\right) \cdot c + b \cdot b}}}{a}}{2}\]
    5. Taylor expanded around -inf 14.3

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

    if -1.2890050783826923e-183 < b < 1.786204067849289e+100

    1. Initial program 10.5

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

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

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

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

    if 1.786204067849289e+100 < b

    1. Initial program 44.2

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

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

      \[\leadsto \frac{\frac{\left(-b\right) - \sqrt{\color{blue}{\left(-4 \cdot a\right) \cdot c + b \cdot b}}}{a}}{2}\]
    5. Taylor expanded around inf 9.2

      \[\leadsto \frac{\frac{\color{blue}{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}}{a}}{2}\]
    6. Simplified3.4

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

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

Reproduce

herbie shell --seed 2019151 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"

  :herbie-target
  (if (< b 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)))