Average Error: 33.9 → 9.9
Time: 5.4s
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 -2.4336717856540716 \cdot 10^{-82}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 2.910803917041586 \cdot 10^{80}:\\ \;\;\;\;\frac{-b_2}{a} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{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 -2.4336717856540716 \cdot 10^{-82}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

\mathbf{elif}\;b_2 \le 2.910803917041586 \cdot 10^{80}:\\
\;\;\;\;\frac{-b_2}{a} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{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 r16909 = b_2;
        double r16910 = -r16909;
        double r16911 = r16909 * r16909;
        double r16912 = a;
        double r16913 = c;
        double r16914 = r16912 * r16913;
        double r16915 = r16911 - r16914;
        double r16916 = sqrt(r16915);
        double r16917 = r16910 - r16916;
        double r16918 = r16917 / r16912;
        return r16918;
}

double f(double a, double b_2, double c) {
        double r16919 = b_2;
        double r16920 = -2.4336717856540716e-82;
        bool r16921 = r16919 <= r16920;
        double r16922 = -0.5;
        double r16923 = c;
        double r16924 = r16923 / r16919;
        double r16925 = r16922 * r16924;
        double r16926 = 2.910803917041586e+80;
        bool r16927 = r16919 <= r16926;
        double r16928 = -r16919;
        double r16929 = a;
        double r16930 = r16928 / r16929;
        double r16931 = r16919 * r16919;
        double r16932 = r16929 * r16923;
        double r16933 = r16931 - r16932;
        double r16934 = sqrt(r16933);
        double r16935 = r16934 / r16929;
        double r16936 = r16930 - r16935;
        double r16937 = 0.5;
        double r16938 = r16937 * r16924;
        double r16939 = 2.0;
        double r16940 = r16919 / r16929;
        double r16941 = r16939 * r16940;
        double r16942 = r16938 - r16941;
        double r16943 = r16927 ? r16936 : r16942;
        double r16944 = r16921 ? r16925 : r16943;
        return r16944;
}

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 < -2.4336717856540716e-82

    1. Initial program 53.2

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

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

    if -2.4336717856540716e-82 < b_2 < 2.910803917041586e+80

    1. Initial program 12.7

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

      \[\leadsto \color{blue}{\frac{-b_2}{a} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{a}}\]

    if 2.910803917041586e+80 < b_2

    1. Initial program 42.9

      \[\frac{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Taylor expanded around inf 3.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 simplification9.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -2.4336717856540716 \cdot 10^{-82}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 2.910803917041586 \cdot 10^{80}:\\ \;\;\;\;\frac{-b_2}{a} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b_2} - 2 \cdot \frac{b_2}{a}\\ \end{array}\]

Reproduce

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