Average Error: 32.9 → 10.3
Time: 16.7s
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 -9.711132829713123 \cdot 10^{+85}:\\ \;\;\;\;\mathsf{fma}\left(-2, \frac{b_2}{a}, \frac{1}{2} \cdot \frac{c}{b_2}\right)\\ \mathbf{elif}\;b_2 \le 3.5014024016497154 \cdot 10^{-97}:\\ \;\;\;\;\frac{1}{\frac{a}{\sqrt{b_2 \cdot b_2 - c \cdot a} - b_2}}\\ \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 -9.711132829713123 \cdot 10^{+85}:\\
\;\;\;\;\mathsf{fma}\left(-2, \frac{b_2}{a}, \frac{1}{2} \cdot \frac{c}{b_2}\right)\\

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

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

\end{array}
double f(double a, double b_2, double c) {
        double r420131 = b_2;
        double r420132 = -r420131;
        double r420133 = r420131 * r420131;
        double r420134 = a;
        double r420135 = c;
        double r420136 = r420134 * r420135;
        double r420137 = r420133 - r420136;
        double r420138 = sqrt(r420137);
        double r420139 = r420132 + r420138;
        double r420140 = r420139 / r420134;
        return r420140;
}

double f(double a, double b_2, double c) {
        double r420141 = b_2;
        double r420142 = -9.711132829713123e+85;
        bool r420143 = r420141 <= r420142;
        double r420144 = -2.0;
        double r420145 = a;
        double r420146 = r420141 / r420145;
        double r420147 = 0.5;
        double r420148 = c;
        double r420149 = r420148 / r420141;
        double r420150 = r420147 * r420149;
        double r420151 = fma(r420144, r420146, r420150);
        double r420152 = 3.5014024016497154e-97;
        bool r420153 = r420141 <= r420152;
        double r420154 = 1.0;
        double r420155 = r420141 * r420141;
        double r420156 = r420148 * r420145;
        double r420157 = r420155 - r420156;
        double r420158 = sqrt(r420157);
        double r420159 = r420158 - r420141;
        double r420160 = r420145 / r420159;
        double r420161 = r420154 / r420160;
        double r420162 = -0.5;
        double r420163 = r420162 * r420149;
        double r420164 = r420153 ? r420161 : r420163;
        double r420165 = r420143 ? r420151 : r420164;
        return r420165;
}

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 < -9.711132829713123e+85

    1. Initial program 40.7

      \[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Simplified40.7

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}}\]
    3. Taylor expanded around -inf 3.9

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

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

    if -9.711132829713123e+85 < b_2 < 3.5014024016497154e-97

    1. Initial program 12.2

      \[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Simplified12.2

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}}\]
    3. Using strategy rm
    4. Applied clear-num12.4

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

    if 3.5014024016497154e-97 < b_2

    1. Initial program 51.6

      \[\frac{\left(-b_2\right) + \sqrt{b_2 \cdot b_2 - a \cdot c}}{a}\]
    2. Simplified51.6

      \[\leadsto \color{blue}{\frac{\sqrt{b_2 \cdot b_2 - a \cdot c} - b_2}{a}}\]
    3. Taylor expanded around inf 10.6

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

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

Reproduce

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