Average Error: 34.1 → 6.6
Time: 21.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 -3.513258824878011748257049801344805265531 \cdot 10^{152}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 8.216265756828381163830890149037103205802 \cdot 10^{-276}:\\ \;\;\;\;\frac{c}{\sqrt{{b_2}^{2} - a \cdot c} - b_2}\\ \mathbf{elif}\;b_2 \le 5.031608061939102936286074782173578716838 \cdot 10^{53}:\\ \;\;\;\;\frac{1}{\frac{a}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b_2}, \frac{b_2}{a} \cdot -2\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 -3.513258824878011748257049801344805265531 \cdot 10^{152}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

\mathbf{elif}\;b_2 \le 8.216265756828381163830890149037103205802 \cdot 10^{-276}:\\
\;\;\;\;\frac{c}{\sqrt{{b_2}^{2} - a \cdot c} - b_2}\\

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

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

\end{array}
double f(double a, double b_2, double c) {
        double r28346 = b_2;
        double r28347 = -r28346;
        double r28348 = r28346 * r28346;
        double r28349 = a;
        double r28350 = c;
        double r28351 = r28349 * r28350;
        double r28352 = r28348 - r28351;
        double r28353 = sqrt(r28352);
        double r28354 = r28347 - r28353;
        double r28355 = r28354 / r28349;
        return r28355;
}

double f(double a, double b_2, double c) {
        double r28356 = b_2;
        double r28357 = -3.5132588248780117e+152;
        bool r28358 = r28356 <= r28357;
        double r28359 = -0.5;
        double r28360 = c;
        double r28361 = r28360 / r28356;
        double r28362 = r28359 * r28361;
        double r28363 = 8.216265756828381e-276;
        bool r28364 = r28356 <= r28363;
        double r28365 = 2.0;
        double r28366 = pow(r28356, r28365);
        double r28367 = a;
        double r28368 = r28367 * r28360;
        double r28369 = r28366 - r28368;
        double r28370 = sqrt(r28369);
        double r28371 = r28370 - r28356;
        double r28372 = r28360 / r28371;
        double r28373 = 5.031608061939103e+53;
        bool r28374 = r28356 <= r28373;
        double r28375 = 1.0;
        double r28376 = -r28356;
        double r28377 = r28356 * r28356;
        double r28378 = r28377 - r28368;
        double r28379 = sqrt(r28378);
        double r28380 = r28376 - r28379;
        double r28381 = r28367 / r28380;
        double r28382 = r28375 / r28381;
        double r28383 = 0.5;
        double r28384 = r28356 / r28367;
        double r28385 = -2.0;
        double r28386 = r28384 * r28385;
        double r28387 = fma(r28383, r28361, r28386);
        double r28388 = r28374 ? r28382 : r28387;
        double r28389 = r28364 ? r28372 : r28388;
        double r28390 = r28358 ? r28362 : r28389;
        return r28390;
}

Error

Bits error versus a

Bits error versus b_2

Bits error versus c

Derivation

  1. Split input into 4 regimes
  2. if b_2 < -3.5132588248780117e+152

    1. Initial program 63.9

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

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

    if -3.5132588248780117e+152 < b_2 < 8.216265756828381e-276

    1. Initial program 33.1

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

      \[\leadsto \frac{\color{blue}{\frac{\left(-b_2\right) \cdot \left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c} \cdot \sqrt{b_2 \cdot b_2 - a \cdot c}}{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}}}{a}\]
    4. Simplified15.2

      \[\leadsto \frac{\frac{\color{blue}{0 + a \cdot c}}{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}}{a}\]
    5. Simplified15.2

      \[\leadsto \frac{\frac{0 + a \cdot c}{\color{blue}{\sqrt{{b_2}^{2} - a \cdot c} - b_2}}}{a}\]
    6. Using strategy rm
    7. Applied div-inv15.3

      \[\leadsto \color{blue}{\frac{0 + a \cdot c}{\sqrt{{b_2}^{2} - a \cdot c} - b_2} \cdot \frac{1}{a}}\]
    8. Using strategy rm
    9. Applied associate-*l/13.9

      \[\leadsto \color{blue}{\frac{\left(0 + a \cdot c\right) \cdot \frac{1}{a}}{\sqrt{{b_2}^{2} - a \cdot c} - b_2}}\]
    10. Simplified7.8

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

    if 8.216265756828381e-276 < b_2 < 5.031608061939103e+53

    1. Initial program 9.3

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

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

    if 5.031608061939103e+53 < b_2

    1. Initial program 39.6

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -3.513258824878011748257049801344805265531 \cdot 10^{152}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \mathbf{elif}\;b_2 \le 8.216265756828381163830890149037103205802 \cdot 10^{-276}:\\ \;\;\;\;\frac{c}{\sqrt{{b_2}^{2} - a \cdot c} - b_2}\\ \mathbf{elif}\;b_2 \le 5.031608061939102936286074782173578716838 \cdot 10^{53}:\\ \;\;\;\;\frac{1}{\frac{a}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b_2}, \frac{b_2}{a} \cdot -2\right)\\ \end{array}\]

Reproduce

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