Average Error: 33.8 → 9.9
Time: 21.2s
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 -3.8424248185280593 \cdot 10^{-34}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 8.01469286573952076 \cdot 10^{79}:\\ \;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \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 -3.8424248185280593 \cdot 10^{-34}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r38473 = b;
        double r38474 = -r38473;
        double r38475 = r38473 * r38473;
        double r38476 = 4.0;
        double r38477 = a;
        double r38478 = c;
        double r38479 = r38477 * r38478;
        double r38480 = r38476 * r38479;
        double r38481 = r38475 - r38480;
        double r38482 = sqrt(r38481);
        double r38483 = r38474 - r38482;
        double r38484 = 2.0;
        double r38485 = r38484 * r38477;
        double r38486 = r38483 / r38485;
        return r38486;
}

double f(double a, double b, double c) {
        double r38487 = b;
        double r38488 = -3.8424248185280593e-34;
        bool r38489 = r38487 <= r38488;
        double r38490 = -1.0;
        double r38491 = c;
        double r38492 = r38491 / r38487;
        double r38493 = r38490 * r38492;
        double r38494 = 8.014692865739521e+79;
        bool r38495 = r38487 <= r38494;
        double r38496 = -r38487;
        double r38497 = r38487 * r38487;
        double r38498 = 4.0;
        double r38499 = a;
        double r38500 = r38499 * r38491;
        double r38501 = r38498 * r38500;
        double r38502 = r38497 - r38501;
        double r38503 = sqrt(r38502);
        double r38504 = r38496 - r38503;
        double r38505 = 1.0;
        double r38506 = 2.0;
        double r38507 = r38506 * r38499;
        double r38508 = r38505 / r38507;
        double r38509 = r38504 * r38508;
        double r38510 = 1.0;
        double r38511 = r38487 / r38499;
        double r38512 = r38492 - r38511;
        double r38513 = r38510 * r38512;
        double r38514 = r38495 ? r38509 : r38513;
        double r38515 = r38489 ? r38493 : r38514;
        return r38515;
}

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.8
Target21.0
Herbie9.9
\[\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 < -3.8424248185280593e-34

    1. Initial program 54.2

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

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

    if -3.8424248185280593e-34 < b < 8.014692865739521e+79

    1. Initial program 14.0

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

      \[\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}}\]

    if 8.014692865739521e+79 < b

    1. Initial program 44.3

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

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified4.3

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

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

Reproduce

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

  :herbie-target
  (if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))

  (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))