Average Error: 34.4 → 8.9
Time: 18.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 -1.532647813487864998120433824563689483214 \cdot 10^{52}:\\ \;\;\;\;\frac{c}{b_2} \cdot \frac{-1}{2}\\ \mathbf{elif}\;b_2 \le -1.571246895950165959018503319317416108871 \cdot 10^{-147}:\\ \;\;\;\;\frac{\frac{a \cdot c}{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}}{a}\\ \mathbf{elif}\;b_2 \le 3.569161879972515120190840820324612209908 \cdot 10^{135}:\\ \;\;\;\;\frac{\left(-b_2\right) - \sqrt{\mathsf{fma}\left(b_2, b_2, -a \cdot c\right)}}{a}\\ \mathbf{else}:\\ \;\;\;\;\left(-\frac{b_2}{a}\right) - \left(\frac{b_2}{a} - \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 -1.532647813487864998120433824563689483214 \cdot 10^{52}:\\
\;\;\;\;\frac{c}{b_2} \cdot \frac{-1}{2}\\

\mathbf{elif}\;b_2 \le -1.571246895950165959018503319317416108871 \cdot 10^{-147}:\\
\;\;\;\;\frac{\frac{a \cdot c}{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}}{a}\\

\mathbf{elif}\;b_2 \le 3.569161879972515120190840820324612209908 \cdot 10^{135}:\\
\;\;\;\;\frac{\left(-b_2\right) - \sqrt{\mathsf{fma}\left(b_2, b_2, -a \cdot c\right)}}{a}\\

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

\end{array}
double f(double a, double b_2, double c) {
        double r29674 = b_2;
        double r29675 = -r29674;
        double r29676 = r29674 * r29674;
        double r29677 = a;
        double r29678 = c;
        double r29679 = r29677 * r29678;
        double r29680 = r29676 - r29679;
        double r29681 = sqrt(r29680);
        double r29682 = r29675 - r29681;
        double r29683 = r29682 / r29677;
        return r29683;
}

double f(double a, double b_2, double c) {
        double r29684 = b_2;
        double r29685 = -1.532647813487865e+52;
        bool r29686 = r29684 <= r29685;
        double r29687 = c;
        double r29688 = r29687 / r29684;
        double r29689 = -0.5;
        double r29690 = r29688 * r29689;
        double r29691 = -1.571246895950166e-147;
        bool r29692 = r29684 <= r29691;
        double r29693 = a;
        double r29694 = r29693 * r29687;
        double r29695 = r29684 * r29684;
        double r29696 = r29695 - r29694;
        double r29697 = sqrt(r29696);
        double r29698 = r29697 - r29684;
        double r29699 = r29694 / r29698;
        double r29700 = r29699 / r29693;
        double r29701 = 3.569161879972515e+135;
        bool r29702 = r29684 <= r29701;
        double r29703 = -r29684;
        double r29704 = -r29694;
        double r29705 = fma(r29684, r29684, r29704);
        double r29706 = sqrt(r29705);
        double r29707 = r29703 - r29706;
        double r29708 = r29707 / r29693;
        double r29709 = r29684 / r29693;
        double r29710 = -r29709;
        double r29711 = 0.5;
        double r29712 = r29684 / r29687;
        double r29713 = r29711 / r29712;
        double r29714 = r29709 - r29713;
        double r29715 = r29710 - r29714;
        double r29716 = r29702 ? r29708 : r29715;
        double r29717 = r29692 ? r29700 : r29716;
        double r29718 = r29686 ? r29690 : r29717;
        return r29718;
}

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 < -1.532647813487865e+52

    1. Initial program 57.3

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

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

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

    if -1.532647813487865e+52 < b_2 < -1.571246895950166e-147

    1. Initial program 37.3

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

      \[\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. Simplified16.9

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

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

    if -1.571246895950166e-147 < b_2 < 3.569161879972515e+135

    1. Initial program 11.4

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

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

      \[\leadsto \color{blue}{\left(-\frac{b_2}{a}\right)} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    5. Using strategy rm
    6. Applied distribute-neg-frac11.4

      \[\leadsto \color{blue}{\frac{-b_2}{a}} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    7. Applied sub-div11.4

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

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

    if 3.569161879972515e+135 < b_2

    1. Initial program 56.9

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

      \[\leadsto \color{blue}{\frac{-b_2}{a} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{a}}\]
    4. Simplified56.9

      \[\leadsto \color{blue}{\left(-\frac{b_2}{a}\right)} - \frac{\sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    5. Taylor expanded around inf 2.5

      \[\leadsto \left(-\frac{b_2}{a}\right) - \color{blue}{\left(\frac{b_2}{a} - \frac{1}{2} \cdot \frac{c}{b_2}\right)}\]
    6. Simplified2.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -1.532647813487864998120433824563689483214 \cdot 10^{52}:\\ \;\;\;\;\frac{c}{b_2} \cdot \frac{-1}{2}\\ \mathbf{elif}\;b_2 \le -1.571246895950165959018503319317416108871 \cdot 10^{-147}:\\ \;\;\;\;\frac{\frac{a \cdot c}{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}}{a}\\ \mathbf{elif}\;b_2 \le 3.569161879972515120190840820324612209908 \cdot 10^{135}:\\ \;\;\;\;\frac{\left(-b_2\right) - \sqrt{\mathsf{fma}\left(b_2, b_2, -a \cdot c\right)}}{a}\\ \mathbf{else}:\\ \;\;\;\;\left(-\frac{b_2}{a}\right) - \left(\frac{b_2}{a} - \frac{\frac{1}{2}}{\frac{b_2}{c}}\right)\\ \end{array}\]

Reproduce

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