Average Error: 33.3 → 21.7
Time: 32.6s
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 2.9636654838140303 \cdot 10^{-242}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{a}}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{2}\\ \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 2.9636654838140303 \cdot 10^{-242}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}{a}}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{a}}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{2}\\

\end{array}
double f(double a, double b, double c) {
        double r2556925 = b;
        double r2556926 = -r2556925;
        double r2556927 = r2556925 * r2556925;
        double r2556928 = 4.0;
        double r2556929 = a;
        double r2556930 = c;
        double r2556931 = r2556929 * r2556930;
        double r2556932 = r2556928 * r2556931;
        double r2556933 = r2556927 - r2556932;
        double r2556934 = sqrt(r2556933);
        double r2556935 = r2556926 + r2556934;
        double r2556936 = 2.0;
        double r2556937 = r2556936 * r2556929;
        double r2556938 = r2556935 / r2556937;
        return r2556938;
}

double f(double a, double b, double c) {
        double r2556939 = b;
        double r2556940 = 2.9636654838140303e-242;
        bool r2556941 = r2556939 <= r2556940;
        double r2556942 = a;
        double r2556943 = c;
        double r2556944 = r2556942 * r2556943;
        double r2556945 = -4.0;
        double r2556946 = r2556939 * r2556939;
        double r2556947 = fma(r2556944, r2556945, r2556946);
        double r2556948 = sqrt(r2556947);
        double r2556949 = r2556948 - r2556939;
        double r2556950 = r2556949 / r2556942;
        double r2556951 = 2.0;
        double r2556952 = r2556950 / r2556951;
        double r2556953 = 0.0;
        double r2556954 = fma(r2556944, r2556945, r2556953);
        double r2556955 = r2556954 / r2556942;
        double r2556956 = r2556939 + r2556948;
        double r2556957 = r2556955 / r2556956;
        double r2556958 = r2556957 / r2556951;
        double r2556959 = r2556941 ? r2556952 : r2556958;
        return r2556959;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.3
Target20.7
Herbie21.7
\[\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 2 regimes
  2. if b < 2.9636654838140303e-242

    1. Initial program 20.8

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified20.8

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

    if 2.9636654838140303e-242 < b

    1. Initial program 45.5

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified45.5

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

      \[\leadsto \frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - \color{blue}{1 \cdot b}}{a}}{2}\]
    5. Applied *-un-lft-identity45.5

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}} - 1 \cdot b}{a}}{2}\]
    6. Applied distribute-lft-out--45.5

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

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} - b}}}}{2}\]
    8. Using strategy rm
    9. Applied flip--45.6

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

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

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

      \[\leadsto \frac{\frac{\color{blue}{\frac{\mathsf{fma}\left(a \cdot c, -4, 0\right)}{a}}}{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} + b}}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification21.7

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

Reproduce

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