Average Error: 33.7 → 10.1
Time: 19.7s
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 -7.406397712303184 \cdot 10^{-53}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \mathbf{elif}\;b \le 2.9822108876570007 \cdot 10^{+66}:\\ \;\;\;\;\frac{\left(-\frac{b}{a}\right) - \frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\left(-b\right) - b}{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 -7.406397712303184 \cdot 10^{-53}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\

\mathbf{elif}\;b \le 2.9822108876570007 \cdot 10^{+66}:\\
\;\;\;\;\frac{\left(-\frac{b}{a}\right) - \frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}}{2}\\

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

\end{array}
double f(double a, double b, double c) {
        double r1743905 = b;
        double r1743906 = -r1743905;
        double r1743907 = r1743905 * r1743905;
        double r1743908 = 4.0;
        double r1743909 = a;
        double r1743910 = c;
        double r1743911 = r1743909 * r1743910;
        double r1743912 = r1743908 * r1743911;
        double r1743913 = r1743907 - r1743912;
        double r1743914 = sqrt(r1743913);
        double r1743915 = r1743906 - r1743914;
        double r1743916 = 2.0;
        double r1743917 = r1743916 * r1743909;
        double r1743918 = r1743915 / r1743917;
        return r1743918;
}

double f(double a, double b, double c) {
        double r1743919 = b;
        double r1743920 = -7.406397712303184e-53;
        bool r1743921 = r1743919 <= r1743920;
        double r1743922 = -2.0;
        double r1743923 = c;
        double r1743924 = r1743923 / r1743919;
        double r1743925 = r1743922 * r1743924;
        double r1743926 = 2.0;
        double r1743927 = r1743925 / r1743926;
        double r1743928 = 2.9822108876570007e+66;
        bool r1743929 = r1743919 <= r1743928;
        double r1743930 = a;
        double r1743931 = r1743919 / r1743930;
        double r1743932 = -r1743931;
        double r1743933 = -4.0;
        double r1743934 = r1743930 * r1743933;
        double r1743935 = r1743919 * r1743919;
        double r1743936 = fma(r1743934, r1743923, r1743935);
        double r1743937 = sqrt(r1743936);
        double r1743938 = r1743937 / r1743930;
        double r1743939 = r1743932 - r1743938;
        double r1743940 = r1743939 / r1743926;
        double r1743941 = -r1743919;
        double r1743942 = r1743941 - r1743919;
        double r1743943 = r1743942 / r1743930;
        double r1743944 = r1743943 / r1743926;
        double r1743945 = r1743929 ? r1743940 : r1743944;
        double r1743946 = r1743921 ? r1743927 : r1743945;
        return r1743946;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.7
Target20.7
Herbie10.1
\[\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 < -7.406397712303184e-53

    1. Initial program 53.9

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

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(-4 \cdot a, c, b \cdot b\right)}}{a}}{2}}\]
    3. Taylor expanded around -inf 7.7

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

    if -7.406397712303184e-53 < b < 2.9822108876570007e+66

    1. Initial program 13.9

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

      \[\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 div-inv14.0

      \[\leadsto \frac{\color{blue}{\left(\left(-b\right) - \sqrt{\mathsf{fma}\left(-4 \cdot a, c, b \cdot b\right)}\right) \cdot \frac{1}{a}}}{2}\]
    5. Using strategy rm
    6. Applied un-div-inv13.9

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

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

    if 2.9822108876570007e+66 < b

    1. Initial program 38.4

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

      \[\leadsto \color{blue}{\frac{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(-4 \cdot a, c, b \cdot b\right)}}{a}}{2}}\]
    3. Taylor expanded around 0 6.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -7.406397712303184 \cdot 10^{-53}:\\ \;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\ \mathbf{elif}\;b \le 2.9822108876570007 \cdot 10^{+66}:\\ \;\;\;\;\frac{\left(-\frac{b}{a}\right) - \frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\left(-b\right) - b}{a}}{2}\\ \end{array}\]

Reproduce

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