Average Error: 34.4 → 10.4
Time: 4.2s
Precision: 64
\[\frac{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
\[\begin{array}{l} \mathbf{if}\;b_2 \le -4.1515494582665793 \cdot 10^{-119}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 3.669945833512195 \cdot 10^{117}:\\ \;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\ \end{array}\]
\frac{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}
\begin{array}{l}
\mathbf{if}\;b_2 \le -4.1515494582665793 \cdot 10^{-119}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

\mathbf{elif}\;b_2 \le 3.669945833512195 \cdot 10^{117}:\\
\;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\

\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\

\end{array}
double f(double a, double b_2, double c) {
        double r8599 = b_2;
        double r8600 = -r8599;
        double r8601 = r8599 * r8599;
        double r8602 = a;
        double r8603 = c;
        double r8604 = r8602 * r8603;
        double r8605 = r8601 - r8604;
        double r8606 = sqrt(r8605);
        double r8607 = r8600 - r8606;
        double r8608 = r8607 / r8602;
        return r8608;
}

double f(double a, double b_2, double c) {
        double r8609 = b_2;
        double r8610 = -4.1515494582665793e-119;
        bool r8611 = r8609 <= r8610;
        double r8612 = -0.5;
        double r8613 = c;
        double r8614 = r8613 / r8609;
        double r8615 = r8612 * r8614;
        double r8616 = 3.669945833512195e+117;
        bool r8617 = r8609 <= r8616;
        double r8618 = -r8609;
        double r8619 = r8609 * r8609;
        double r8620 = a;
        double r8621 = r8620 * r8613;
        double r8622 = r8619 - r8621;
        double r8623 = sqrt(r8622);
        double r8624 = r8618 - r8623;
        double r8625 = 1.0;
        double r8626 = r8625 / r8620;
        double r8627 = r8624 * r8626;
        double r8628 = 0.5;
        double r8629 = r8628 * r8614;
        double r8630 = 2.0;
        double r8631 = r8609 / r8620;
        double r8632 = r8630 * r8631;
        double r8633 = r8629 - r8632;
        double r8634 = r8617 ? r8627 : r8633;
        double r8635 = r8611 ? r8615 : r8634;
        return r8635;
}

Error

Bits error versus a

Bits error versus b_2

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if b_2 < -4.1515494582665793e-119

    1. Initial program 51.5

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

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

    if -4.1515494582665793e-119 < b_2 < 3.669945833512195e+117

    1. Initial program 11.7

      \[\frac{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Using strategy rm
    3. Applied div-inv11.8

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

    if 3.669945833512195e+117 < b_2

    1. Initial program 52.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -4.1515494582665793 \cdot 10^{-119}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 3.669945833512195 \cdot 10^{117}:\\ \;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2020081 +o rules:numerics
(FPCore (a b_2 c)
  :name "quad2m (problem 3.2.1, negative)"
  :precision binary64
  (/ (- (- b_2) (sqrt (- (* b_2 b_2) (* a c)))) a))