Average Error: 34.1 → 10.5
Time: 4.8s
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 -5.643947230437265585428917170074785083411 \cdot 10^{-71}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 1.498338218964205825262884582884276173268 \cdot 10^{54}:\\ \;\;\;\;\frac{1}{\frac{a}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}}\\ \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 -5.643947230437265585428917170074785083411 \cdot 10^{-71}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

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

\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 r12757 = b_2;
        double r12758 = -r12757;
        double r12759 = r12757 * r12757;
        double r12760 = a;
        double r12761 = c;
        double r12762 = r12760 * r12761;
        double r12763 = r12759 - r12762;
        double r12764 = sqrt(r12763);
        double r12765 = r12758 - r12764;
        double r12766 = r12765 / r12760;
        return r12766;
}

double f(double a, double b_2, double c) {
        double r12767 = b_2;
        double r12768 = -5.6439472304372656e-71;
        bool r12769 = r12767 <= r12768;
        double r12770 = -0.5;
        double r12771 = c;
        double r12772 = r12771 / r12767;
        double r12773 = r12770 * r12772;
        double r12774 = 1.4983382189642058e+54;
        bool r12775 = r12767 <= r12774;
        double r12776 = 1.0;
        double r12777 = a;
        double r12778 = -r12767;
        double r12779 = r12767 * r12767;
        double r12780 = r12777 * r12771;
        double r12781 = r12779 - r12780;
        double r12782 = sqrt(r12781);
        double r12783 = r12778 - r12782;
        double r12784 = r12777 / r12783;
        double r12785 = r12776 / r12784;
        double r12786 = 0.5;
        double r12787 = r12786 * r12772;
        double r12788 = 2.0;
        double r12789 = r12767 / r12777;
        double r12790 = r12788 * r12789;
        double r12791 = r12787 - r12790;
        double r12792 = r12775 ? r12785 : r12791;
        double r12793 = r12769 ? r12773 : r12792;
        return r12793;
}

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 < -5.6439472304372656e-71

    1. Initial program 53.3

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

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

    if -5.6439472304372656e-71 < b_2 < 1.4983382189642058e+54

    1. Initial program 14.2

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

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

    if 1.4983382189642058e+54 < b_2

    1. Initial program 38.0

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

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

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

Reproduce

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