Average Error: 34.6 → 16.2
Time: 31.9s
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le 2.49445624012960862396084940365110205816 \cdot 10^{-289}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}{a}}{2}\\ \mathbf{elif}\;b \le 3.224491050532555179035846228386712352959 \cdot 10^{112}:\\ \;\;\;\;\frac{\frac{\frac{-1}{\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}}}{\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}} \cdot \left(\frac{a}{a} \cdot \frac{c \cdot 4}{\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(c \cdot \left(-a\right), 4, 0\right)}{2 \cdot b}}{a}}{2}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le 2.49445624012960862396084940365110205816 \cdot 10^{-289}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}{a}}{2}\\

\mathbf{elif}\;b \le 3.224491050532555179035846228386712352959 \cdot 10^{112}:\\
\;\;\;\;\frac{\frac{\frac{-1}{\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}}}{\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}} \cdot \left(\frac{a}{a} \cdot \frac{c \cdot 4}{\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, c \cdot \left(-a\right), b \cdot b\right)}}}\right)}{2}\\

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

\end{array}
double f(double a, double b, double c) {
        double r65939 = b;
        double r65940 = -r65939;
        double r65941 = r65939 * r65939;
        double r65942 = 4.0;
        double r65943 = a;
        double r65944 = r65942 * r65943;
        double r65945 = c;
        double r65946 = r65944 * r65945;
        double r65947 = r65941 - r65946;
        double r65948 = sqrt(r65947);
        double r65949 = r65940 + r65948;
        double r65950 = 2.0;
        double r65951 = r65950 * r65943;
        double r65952 = r65949 / r65951;
        return r65952;
}

double f(double a, double b, double c) {
        double r65953 = b;
        double r65954 = 2.4944562401296086e-289;
        bool r65955 = r65953 <= r65954;
        double r65956 = a;
        double r65957 = -r65956;
        double r65958 = 4.0;
        double r65959 = r65957 * r65958;
        double r65960 = c;
        double r65961 = r65953 * r65953;
        double r65962 = fma(r65959, r65960, r65961);
        double r65963 = sqrt(r65962);
        double r65964 = r65963 - r65953;
        double r65965 = r65964 / r65956;
        double r65966 = 2.0;
        double r65967 = r65965 / r65966;
        double r65968 = 3.224491050532555e+112;
        bool r65969 = r65953 <= r65968;
        double r65970 = -1.0;
        double r65971 = r65960 * r65957;
        double r65972 = fma(r65958, r65971, r65961);
        double r65973 = sqrt(r65972);
        double r65974 = r65953 + r65973;
        double r65975 = cbrt(r65974);
        double r65976 = r65970 / r65975;
        double r65977 = r65976 / r65975;
        double r65978 = r65956 / r65956;
        double r65979 = r65960 * r65958;
        double r65980 = r65979 / r65975;
        double r65981 = r65978 * r65980;
        double r65982 = r65977 * r65981;
        double r65983 = r65982 / r65966;
        double r65984 = 0.0;
        double r65985 = fma(r65971, r65958, r65984);
        double r65986 = 2.0;
        double r65987 = r65986 * r65953;
        double r65988 = r65985 / r65987;
        double r65989 = r65988 / r65956;
        double r65990 = r65989 / r65966;
        double r65991 = r65969 ? r65983 : r65990;
        double r65992 = r65955 ? r65967 : r65991;
        return r65992;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original34.6
Target21.0
Herbie16.2
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < 2.4944562401296086e-289

    1. Initial program 22.5

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

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

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

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

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

    if 2.4944562401296086e-289 < b < 3.224491050532555e+112

    1. Initial program 33.8

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

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

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

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

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

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}{\color{blue}{1 \cdot a}}}{2}\]
    9. Applied add-cube-cbrt16.5

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

      \[\leadsto \frac{\frac{\frac{\color{blue}{1 \cdot \mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}}{\left(\sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b} \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}\right) \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}{1 \cdot a}}{2}\]
    11. Applied times-frac16.5

      \[\leadsto \frac{\frac{\color{blue}{\frac{1}{\sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b} \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}} \cdot \frac{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, 0\right)}{\sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} + b}}}}{1 \cdot a}}{2}\]
    12. Applied times-frac15.8

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

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

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

    if 3.224491050532555e+112 < b

    1. Initial program 60.8

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

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

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

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

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

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

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

Reproduce

herbie shell --seed 2019194 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r1)"

  :herbie-target
  (if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))

  (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))