Average Error: 33.2 → 18.2
Time: 29.2s
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 -1.488368069126177 \cdot 10^{-277}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, -b\right)}{a}}{2}\\ \mathbf{elif}\;b \le 1.1941771483955193 \cdot 10^{+94}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(-4, a \cdot c, 0\right)}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{a}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(-4, a \cdot c, 0\right)}{b \cdot 2}}{a}}{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 -1.488368069126177 \cdot 10^{-277}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, -b\right)}{a}}{2}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r2352735 = b;
        double r2352736 = -r2352735;
        double r2352737 = r2352735 * r2352735;
        double r2352738 = 4.0;
        double r2352739 = a;
        double r2352740 = c;
        double r2352741 = r2352739 * r2352740;
        double r2352742 = r2352738 * r2352741;
        double r2352743 = r2352737 - r2352742;
        double r2352744 = sqrt(r2352743);
        double r2352745 = r2352736 + r2352744;
        double r2352746 = 2.0;
        double r2352747 = r2352746 * r2352739;
        double r2352748 = r2352745 / r2352747;
        return r2352748;
}

double f(double a, double b, double c) {
        double r2352749 = b;
        double r2352750 = -1.488368069126177e-277;
        bool r2352751 = r2352749 <= r2352750;
        double r2352752 = a;
        double r2352753 = c;
        double r2352754 = r2352752 * r2352753;
        double r2352755 = -4.0;
        double r2352756 = r2352749 * r2352749;
        double r2352757 = fma(r2352754, r2352755, r2352756);
        double r2352758 = sqrt(r2352757);
        double r2352759 = sqrt(r2352758);
        double r2352760 = -r2352749;
        double r2352761 = fma(r2352759, r2352759, r2352760);
        double r2352762 = r2352761 / r2352752;
        double r2352763 = 2.0;
        double r2352764 = r2352762 / r2352763;
        double r2352765 = 1.1941771483955193e+94;
        bool r2352766 = r2352749 <= r2352765;
        double r2352767 = 0.0;
        double r2352768 = fma(r2352755, r2352754, r2352767);
        double r2352769 = r2352749 + r2352758;
        double r2352770 = r2352768 / r2352769;
        double r2352771 = r2352770 / r2352752;
        double r2352772 = r2352771 / r2352763;
        double r2352773 = r2352749 * r2352763;
        double r2352774 = r2352768 / r2352773;
        double r2352775 = r2352774 / r2352752;
        double r2352776 = r2352775 / r2352763;
        double r2352777 = r2352766 ? r2352772 : r2352776;
        double r2352778 = r2352751 ? r2352764 : r2352777;
        return r2352778;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.2
Target20.4
Herbie18.2
\[\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 < -1.488368069126177e-277

    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.7

      \[\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 add-sqr-sqrt20.7

      \[\leadsto \frac{\frac{\sqrt{\color{blue}{\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}{a}}{2}\]
    5. Applied sqrt-prod20.9

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

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

    if -1.488368069126177e-277 < b < 1.1941771483955193e+94

    1. Initial program 31.7

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

      \[\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 flip--31.8

      \[\leadsto \frac{\frac{\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}}}{a}}{2}\]
    5. Simplified16.5

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

    if 1.1941771483955193e+94 < b

    1. Initial program 58.0

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

      \[\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 flip--58.0

      \[\leadsto \frac{\frac{\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}}}{a}}{2}\]
    5. Simplified31.9

      \[\leadsto \frac{\frac{\frac{\color{blue}{\mathsf{fma}\left(-4, a \cdot c, 0\right)}}{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)} + b}}{a}}{2}\]
    6. Taylor expanded around 0 15.4

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

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

Reproduce

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