Average Error: 34.9 → 8.8
Time: 19.5s
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.806935659273273367110965907543014627108 \cdot 10^{98}:\\ \;\;\;\;\mathsf{fma}\left(\frac{c}{b_2}, \frac{1}{2}, \frac{b_2}{a} \cdot -2\right)\\ \mathbf{elif}\;b_2 \le 1.769241967981359063235122492290664188248 \cdot 10^{-128}:\\ \;\;\;\;\frac{1}{\frac{a}{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}}\\ \mathbf{elif}\;b_2 \le 4173650.65475720725953578948974609375:\\ \;\;\;\;\frac{c \cdot a}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}} \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \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.806935659273273367110965907543014627108 \cdot 10^{98}:\\
\;\;\;\;\mathsf{fma}\left(\frac{c}{b_2}, \frac{1}{2}, \frac{b_2}{a} \cdot -2\right)\\

\mathbf{elif}\;b_2 \le 1.769241967981359063235122492290664188248 \cdot 10^{-128}:\\
\;\;\;\;\frac{1}{\frac{a}{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}}\\

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

\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\

\end{array}
double f(double a, double b_2, double c) {
        double r29974 = b_2;
        double r29975 = -r29974;
        double r29976 = r29974 * r29974;
        double r29977 = a;
        double r29978 = c;
        double r29979 = r29977 * r29978;
        double r29980 = r29976 - r29979;
        double r29981 = sqrt(r29980);
        double r29982 = r29975 + r29981;
        double r29983 = r29982 / r29977;
        return r29983;
}

double f(double a, double b_2, double c) {
        double r29984 = b_2;
        double r29985 = -1.8069356592732734e+98;
        bool r29986 = r29984 <= r29985;
        double r29987 = c;
        double r29988 = r29987 / r29984;
        double r29989 = 0.5;
        double r29990 = a;
        double r29991 = r29984 / r29990;
        double r29992 = -2.0;
        double r29993 = r29991 * r29992;
        double r29994 = fma(r29988, r29989, r29993);
        double r29995 = 1.769241967981359e-128;
        bool r29996 = r29984 <= r29995;
        double r29997 = 1.0;
        double r29998 = r29984 * r29984;
        double r29999 = r29990 * r29987;
        double r30000 = r29998 - r29999;
        double r30001 = sqrt(r30000);
        double r30002 = r30001 - r29984;
        double r30003 = r29990 / r30002;
        double r30004 = r29997 / r30003;
        double r30005 = 4173650.6547572073;
        bool r30006 = r29984 <= r30005;
        double r30007 = r29987 * r29990;
        double r30008 = -r29984;
        double r30009 = r30008 - r30001;
        double r30010 = r30007 / r30009;
        double r30011 = r29997 / r29990;
        double r30012 = r30010 * r30011;
        double r30013 = -0.5;
        double r30014 = r30013 * r29988;
        double r30015 = r30006 ? r30012 : r30014;
        double r30016 = r29996 ? r30004 : r30015;
        double r30017 = r29986 ? r29994 : r30016;
        return r30017;
}

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.8069356592732734e+98

    1. Initial program 46.8

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

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

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

    if -1.8069356592732734e+98 < b_2 < 1.769241967981359e-128

    1. Initial program 11.7

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

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

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

    if 1.769241967981359e-128 < b_2 < 4173650.6547572073

    1. Initial program 36.2

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

      \[\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 + c \cdot a}}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}}}{a}\]
    5. Using strategy rm
    6. Applied div-inv17.0

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

    if 4173650.6547572073 < b_2

    1. Initial program 56.8

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

      \[\leadsto \color{blue}{\frac{-1}{2} \cdot \frac{c}{b_2}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification8.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;b_2 \le -1.806935659273273367110965907543014627108 \cdot 10^{98}:\\ \;\;\;\;\mathsf{fma}\left(\frac{c}{b_2}, \frac{1}{2}, \frac{b_2}{a} \cdot -2\right)\\ \mathbf{elif}\;b_2 \le 1.769241967981359063235122492290664188248 \cdot 10^{-128}:\\ \;\;\;\;\frac{1}{\frac{a}{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}}\\ \mathbf{elif}\;b_2 \le 4173650.65475720725953578948974609375:\\ \;\;\;\;\frac{c \cdot a}{\left(-b_2\right) - \sqrt{b_2 \cdot b_2 - a \cdot c}} \cdot \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b_2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019235 +o rules:numerics
(FPCore (a b_2 c)
  :name "quad2p (problem 3.2.1, positive)"
  :precision binary64
  (/ (+ (- b_2) (sqrt (- (* b_2 b_2) (* a c)))) a))