Average Error: 34.0 → 10.8
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 -6.9315373378557038 \cdot 10^{-23}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 1.77017414835012383 \cdot 10^{70}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \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 -6.9315373378557038 \cdot 10^{-23}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r74201 = b;
        double r74202 = -r74201;
        double r74203 = r74201 * r74201;
        double r74204 = 4.0;
        double r74205 = a;
        double r74206 = c;
        double r74207 = r74205 * r74206;
        double r74208 = r74204 * r74207;
        double r74209 = r74203 - r74208;
        double r74210 = sqrt(r74209);
        double r74211 = r74202 - r74210;
        double r74212 = 2.0;
        double r74213 = r74212 * r74205;
        double r74214 = r74211 / r74213;
        return r74214;
}

double f(double a, double b, double c) {
        double r74215 = b;
        double r74216 = -6.931537337855704e-23;
        bool r74217 = r74215 <= r74216;
        double r74218 = -1.0;
        double r74219 = c;
        double r74220 = r74219 / r74215;
        double r74221 = r74218 * r74220;
        double r74222 = 1.7701741483501238e+70;
        bool r74223 = r74215 <= r74222;
        double r74224 = -r74215;
        double r74225 = r74215 * r74215;
        double r74226 = 4.0;
        double r74227 = a;
        double r74228 = r74227 * r74219;
        double r74229 = r74226 * r74228;
        double r74230 = r74225 - r74229;
        double r74231 = sqrt(r74230);
        double r74232 = r74224 - r74231;
        double r74233 = 2.0;
        double r74234 = r74233 * r74227;
        double r74235 = r74232 / r74234;
        double r74236 = r74215 / r74227;
        double r74237 = r74218 * r74236;
        double r74238 = r74223 ? r74235 : r74237;
        double r74239 = r74217 ? r74221 : r74238;
        return r74239;
}

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.8
Herbie10.8
\[\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 < -6.931537337855704e-23

    1. Initial program 54.3

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

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

    if -6.931537337855704e-23 < b < 1.7701741483501238e+70

    1. Initial program 15.5

      \[\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-inv15.6

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

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

    if 1.7701741483501238e+70 < b

    1. Initial program 41.6

      \[\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-num41.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -6.9315373378557038 \cdot 10^{-23}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 1.77017414835012383 \cdot 10^{70}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{b}{a}\\ \end{array}\]

Reproduce

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