Average Error: 33.9 → 10.5
Time: 28.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 -1.5961406266953245 \cdot 10^{-58}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 3.1115579814291686 \cdot 10^{+29}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}}\\ \mathbf{else}:\\ \;\;\;\;\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 -1.5961406266953245 \cdot 10^{-58}:\\
\;\;\;\;-\frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r2785871 = b;
        double r2785872 = -r2785871;
        double r2785873 = r2785871 * r2785871;
        double r2785874 = 4.0;
        double r2785875 = a;
        double r2785876 = c;
        double r2785877 = r2785875 * r2785876;
        double r2785878 = r2785874 * r2785877;
        double r2785879 = r2785873 - r2785878;
        double r2785880 = sqrt(r2785879);
        double r2785881 = r2785872 - r2785880;
        double r2785882 = 2.0;
        double r2785883 = r2785882 * r2785875;
        double r2785884 = r2785881 / r2785883;
        return r2785884;
}

double f(double a, double b, double c) {
        double r2785885 = b;
        double r2785886 = -1.5961406266953245e-58;
        bool r2785887 = r2785885 <= r2785886;
        double r2785888 = c;
        double r2785889 = r2785888 / r2785885;
        double r2785890 = -r2785889;
        double r2785891 = 3.1115579814291686e+29;
        bool r2785892 = r2785885 <= r2785891;
        double r2785893 = 1.0;
        double r2785894 = 2.0;
        double r2785895 = a;
        double r2785896 = r2785894 * r2785895;
        double r2785897 = -r2785885;
        double r2785898 = r2785885 * r2785885;
        double r2785899 = r2785895 * r2785888;
        double r2785900 = 4.0;
        double r2785901 = r2785899 * r2785900;
        double r2785902 = r2785898 - r2785901;
        double r2785903 = sqrt(r2785902);
        double r2785904 = r2785897 - r2785903;
        double r2785905 = r2785896 / r2785904;
        double r2785906 = r2785893 / r2785905;
        double r2785907 = r2785897 / r2785895;
        double r2785908 = r2785892 ? r2785906 : r2785907;
        double r2785909 = r2785887 ? r2785890 : r2785908;
        return r2785909;
}

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.9
Target20.6
Herbie10.5
\[\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.5961406266953245e-58

    1. Initial program 53.4

      \[\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}}\]
    3. Simplified8.1

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

    if -1.5961406266953245e-58 < b < 3.1115579814291686e+29

    1. Initial program 14.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-num14.9

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

    if 3.1115579814291686e+29 < b

    1. Initial program 34.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-num34.5

      \[\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 6.5

      \[\leadsto \color{blue}{-1 \cdot \frac{b}{a}}\]
    5. Simplified6.5

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

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

Reproduce

herbie shell --seed 2019134 +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)))