Average Error: 34.3 → 10.3
Time: 24.3s
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.068787453924659787754027441129039063224 \cdot 10^{-76}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 2.360908374051695590422690701366520544893 \cdot 10^{86}:\\ \;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-2, b_2, \frac{a \cdot \frac{1}{2}}{\frac{b_2}{c}}\right)}{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.068787453924659787754027441129039063224 \cdot 10^{-76}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

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

\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-2, b_2, \frac{a \cdot \frac{1}{2}}{\frac{b_2}{c}}\right)}{a}\\

\end{array}
double f(double a, double b_2, double c) {
        double r1050186 = b_2;
        double r1050187 = -r1050186;
        double r1050188 = r1050186 * r1050186;
        double r1050189 = a;
        double r1050190 = c;
        double r1050191 = r1050189 * r1050190;
        double r1050192 = r1050188 - r1050191;
        double r1050193 = sqrt(r1050192);
        double r1050194 = r1050187 - r1050193;
        double r1050195 = r1050194 / r1050189;
        return r1050195;
}

double f(double a, double b_2, double c) {
        double r1050196 = b_2;
        double r1050197 = -2.0687874539246598e-76;
        bool r1050198 = r1050196 <= r1050197;
        double r1050199 = -0.5;
        double r1050200 = c;
        double r1050201 = r1050200 / r1050196;
        double r1050202 = r1050199 * r1050201;
        double r1050203 = 2.3609083740516956e+86;
        bool r1050204 = r1050196 <= r1050203;
        double r1050205 = -r1050196;
        double r1050206 = r1050196 * r1050196;
        double r1050207 = a;
        double r1050208 = r1050207 * r1050200;
        double r1050209 = r1050206 - r1050208;
        double r1050210 = sqrt(r1050209);
        double r1050211 = r1050205 - r1050210;
        double r1050212 = 1.0;
        double r1050213 = r1050212 / r1050207;
        double r1050214 = r1050211 * r1050213;
        double r1050215 = -2.0;
        double r1050216 = 0.5;
        double r1050217 = r1050207 * r1050216;
        double r1050218 = r1050196 / r1050200;
        double r1050219 = r1050217 / r1050218;
        double r1050220 = fma(r1050215, r1050196, r1050219);
        double r1050221 = r1050220 / r1050207;
        double r1050222 = r1050204 ? r1050214 : r1050221;
        double r1050223 = r1050198 ? r1050202 : r1050222;
        return r1050223;
}

Error

Bits error versus a

Bits error versus b_2

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b_2 < -2.0687874539246598e-76

    1. Initial program 52.9

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

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

    if -2.0687874539246598e-76 < b_2 < 2.3609083740516956e+86

    1. Initial program 13.1

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

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

    if 2.3609083740516956e+86 < b_2

    1. Initial program 44.0

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(-2, b_2, \frac{a \cdot \frac{1}{2}}{\frac{b_2}{c}}\right)}}{a}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification10.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -2.068787453924659787754027441129039063224 \cdot 10^{-76}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 2.360908374051695590422690701366520544893 \cdot 10^{86}:\\ \;\;\;\;\left(\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}\right) \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(-2, b_2, \frac{a \cdot \frac{1}{2}}{\frac{b_2}{c}}\right)}{a}\\ \end{array}\]

Reproduce

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