Average Error: 34.5 → 10.2
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 -8.3645547041066157 \cdot 10^{-80}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 4.1199128263687574 \cdot 10^{46}:\\ \;\;\;\;\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 -8.3645547041066157 \cdot 10^{-80}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

\mathbf{elif}\;b_2 \le 4.1199128263687574 \cdot 10^{46}:\\
\;\;\;\;\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 r11954 = b_2;
        double r11955 = -r11954;
        double r11956 = r11954 * r11954;
        double r11957 = a;
        double r11958 = c;
        double r11959 = r11957 * r11958;
        double r11960 = r11956 - r11959;
        double r11961 = sqrt(r11960);
        double r11962 = r11955 - r11961;
        double r11963 = r11962 / r11957;
        return r11963;
}

double f(double a, double b_2, double c) {
        double r11964 = b_2;
        double r11965 = -8.364554704106616e-80;
        bool r11966 = r11964 <= r11965;
        double r11967 = -0.5;
        double r11968 = c;
        double r11969 = r11968 / r11964;
        double r11970 = r11967 * r11969;
        double r11971 = 4.1199128263687574e+46;
        bool r11972 = r11964 <= r11971;
        double r11973 = -r11964;
        double r11974 = r11964 * r11964;
        double r11975 = a;
        double r11976 = r11975 * r11968;
        double r11977 = r11974 - r11976;
        double r11978 = sqrt(r11977);
        double r11979 = r11973 - r11978;
        double r11980 = 1.0;
        double r11981 = r11980 / r11975;
        double r11982 = r11979 * r11981;
        double r11983 = 0.5;
        double r11984 = r11983 * r11969;
        double r11985 = 2.0;
        double r11986 = r11964 / r11975;
        double r11987 = r11985 * r11986;
        double r11988 = r11984 - r11987;
        double r11989 = r11972 ? r11982 : r11988;
        double r11990 = r11966 ? r11970 : r11989;
        return r11990;
}

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 < -8.364554704106616e-80

    1. Initial program 53.8

      \[\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 -8.364554704106616e-80 < b_2 < 4.1199128263687574e+46

    1. Initial program 13.7

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

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

    if 4.1199128263687574e+46 < b_2

    1. Initial program 36.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -8.3645547041066157 \cdot 10^{-80}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 4.1199128263687574 \cdot 10^{46}:\\ \;\;\;\;\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 2020046 +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))