Average Error: 33.7 → 10.0
Time: 19.0s
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -4.8993775207591446 \cdot 10^{+126}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 2.6443485350724205 \cdot 10^{-92}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} - b}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-c}{b}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -4.8993775207591446 \cdot 10^{+126}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\

\mathbf{elif}\;b \le 2.6443485350724205 \cdot 10^{-92}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} - b}{2}}{a}\\

\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\

\end{array}
double f(double a, double b, double c) {
        double r2272225 = b;
        double r2272226 = -r2272225;
        double r2272227 = r2272225 * r2272225;
        double r2272228 = 4.0;
        double r2272229 = a;
        double r2272230 = c;
        double r2272231 = r2272229 * r2272230;
        double r2272232 = r2272228 * r2272231;
        double r2272233 = r2272227 - r2272232;
        double r2272234 = sqrt(r2272233);
        double r2272235 = r2272226 + r2272234;
        double r2272236 = 2.0;
        double r2272237 = r2272236 * r2272229;
        double r2272238 = r2272235 / r2272237;
        return r2272238;
}

double f(double a, double b, double c) {
        double r2272239 = b;
        double r2272240 = -4.8993775207591446e+126;
        bool r2272241 = r2272239 <= r2272240;
        double r2272242 = c;
        double r2272243 = r2272242 / r2272239;
        double r2272244 = a;
        double r2272245 = r2272239 / r2272244;
        double r2272246 = r2272243 - r2272245;
        double r2272247 = 2.6443485350724205e-92;
        bool r2272248 = r2272239 <= r2272247;
        double r2272249 = -4.0;
        double r2272250 = r2272244 * r2272249;
        double r2272251 = r2272239 * r2272239;
        double r2272252 = fma(r2272250, r2272242, r2272251);
        double r2272253 = sqrt(r2272252);
        double r2272254 = r2272253 - r2272239;
        double r2272255 = 2.0;
        double r2272256 = r2272254 / r2272255;
        double r2272257 = r2272256 / r2272244;
        double r2272258 = -r2272242;
        double r2272259 = r2272258 / r2272239;
        double r2272260 = r2272248 ? r2272257 : r2272259;
        double r2272261 = r2272241 ? r2272246 : r2272260;
        return r2272261;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.7
Target20.5
Herbie10.0
\[\begin{array}{l} \mathbf{if}\;b \lt 0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < -4.8993775207591446e+126

    1. Initial program 51.7

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

      \[\leadsto \color{blue}{\frac{c}{b} - \frac{b}{a}}\]

    if -4.8993775207591446e+126 < b < 2.6443485350724205e-92

    1. Initial program 12.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied associate-/r*12.2

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

      \[\leadsto \frac{\color{blue}{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}}{a}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity12.3

      \[\leadsto \frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{\color{blue}{1 \cdot a}}\]
    7. Applied associate-/r*12.3

      \[\leadsto \color{blue}{\frac{\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{1}}{a}}\]
    8. Simplified12.2

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

    if 2.6443485350724205e-92 < b

    1. Initial program 51.9

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

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    3. Simplified9.6

      \[\leadsto \color{blue}{-\frac{c}{b}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification10.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -4.8993775207591446 \cdot 10^{+126}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 2.6443485350724205 \cdot 10^{-92}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} - b}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019135 +o rules:numerics
(FPCore (a b c)
  :name "quadp (p42, positive)"

  :herbie-target
  (if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))

  (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))