Average Error: 33.3 → 9.8
Time: 15.9s
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.7874989996849275 \cdot 10^{-40}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 1.7665622931893247 \cdot 10^{+83}:\\ \;\;\;\;\frac{1}{\frac{a}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - c \cdot a}}}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{b_2}{a}, -2, \frac{\frac{1}{2}}{\frac{b_2}{c}}\right)\\ \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.7874989996849275 \cdot 10^{-40}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

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

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

\end{array}
double f(double a, double b_2, double c) {
        double r477346 = b_2;
        double r477347 = -r477346;
        double r477348 = r477346 * r477346;
        double r477349 = a;
        double r477350 = c;
        double r477351 = r477349 * r477350;
        double r477352 = r477348 - r477351;
        double r477353 = sqrt(r477352);
        double r477354 = r477347 - r477353;
        double r477355 = r477354 / r477349;
        return r477355;
}

double f(double a, double b_2, double c) {
        double r477356 = b_2;
        double r477357 = -5.7874989996849275e-40;
        bool r477358 = r477356 <= r477357;
        double r477359 = -0.5;
        double r477360 = c;
        double r477361 = r477360 / r477356;
        double r477362 = r477359 * r477361;
        double r477363 = 1.7665622931893247e+83;
        bool r477364 = r477356 <= r477363;
        double r477365 = 1.0;
        double r477366 = a;
        double r477367 = -r477356;
        double r477368 = r477356 * r477356;
        double r477369 = r477360 * r477366;
        double r477370 = r477368 - r477369;
        double r477371 = sqrt(r477370);
        double r477372 = r477367 - r477371;
        double r477373 = r477366 / r477372;
        double r477374 = r477365 / r477373;
        double r477375 = r477356 / r477366;
        double r477376 = -2.0;
        double r477377 = 0.5;
        double r477378 = r477356 / r477360;
        double r477379 = r477377 / r477378;
        double r477380 = fma(r477375, r477376, r477379);
        double r477381 = r477364 ? r477374 : r477380;
        double r477382 = r477358 ? r477362 : r477381;
        return r477382;
}

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 < -5.7874989996849275e-40

    1. Initial program 53.7

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

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

    if -5.7874989996849275e-40 < b_2 < 1.7665622931893247e+83

    1. Initial program 13.8

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

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

    if 1.7665622931893247e+83 < b_2

    1. Initial program 42.5

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -5.7874989996849275 \cdot 10^{-40}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 1.7665622931893247 \cdot 10^{+83}:\\ \;\;\;\;\frac{1}{\frac{a}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - c \cdot a}}}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{b_2}{a}, -2, \frac{\frac{1}{2}}{\frac{b_2}{c}}\right)\\ \end{array}\]

Reproduce

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