Average Error: 34.0 → 9.6
Time: 20.1s
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 -3438870219673743856300090597329338368:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -9.940959811381675939988945669030883027544 \cdot 10^{-96}:\\ \;\;\;\;\frac{\frac{\left(a \cdot c\right) \cdot 4}{\mathsf{fma}\left(\left|\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right|, \sqrt{\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}}, -b\right) + \left(\left(-b\right) + b\right)}}{2 \cdot a}\\ \mathbf{elif}\;b \le -6.373481960958038092461518588786337642855 \cdot 10^{-132}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.972594060757836305384453450333248094101 \cdot 10^{74}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \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 -3438870219673743856300090597329338368:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

\mathbf{elif}\;b \le -6.373481960958038092461518588786337642855 \cdot 10^{-132}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 2.972594060757836305384453450333248094101 \cdot 10^{74}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\

\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

\end{array}
double f(double a, double b, double c) {
        double r67910 = b;
        double r67911 = -r67910;
        double r67912 = r67910 * r67910;
        double r67913 = 4.0;
        double r67914 = a;
        double r67915 = c;
        double r67916 = r67914 * r67915;
        double r67917 = r67913 * r67916;
        double r67918 = r67912 - r67917;
        double r67919 = sqrt(r67918);
        double r67920 = r67911 - r67919;
        double r67921 = 2.0;
        double r67922 = r67921 * r67914;
        double r67923 = r67920 / r67922;
        return r67923;
}

double f(double a, double b, double c) {
        double r67924 = b;
        double r67925 = -3.438870219673744e+36;
        bool r67926 = r67924 <= r67925;
        double r67927 = -1.0;
        double r67928 = c;
        double r67929 = r67928 / r67924;
        double r67930 = r67927 * r67929;
        double r67931 = -9.940959811381676e-96;
        bool r67932 = r67924 <= r67931;
        double r67933 = a;
        double r67934 = r67933 * r67928;
        double r67935 = 4.0;
        double r67936 = r67934 * r67935;
        double r67937 = r67924 * r67924;
        double r67938 = r67935 * r67934;
        double r67939 = r67937 - r67938;
        double r67940 = cbrt(r67939);
        double r67941 = fabs(r67940);
        double r67942 = sqrt(r67940);
        double r67943 = -r67924;
        double r67944 = fma(r67941, r67942, r67943);
        double r67945 = r67943 + r67924;
        double r67946 = r67944 + r67945;
        double r67947 = r67936 / r67946;
        double r67948 = 2.0;
        double r67949 = r67948 * r67933;
        double r67950 = r67947 / r67949;
        double r67951 = -6.373481960958038e-132;
        bool r67952 = r67924 <= r67951;
        double r67953 = 2.9725940607578363e+74;
        bool r67954 = r67924 <= r67953;
        double r67955 = r67935 * r67933;
        double r67956 = r67955 * r67928;
        double r67957 = r67937 - r67956;
        double r67958 = sqrt(r67957);
        double r67959 = r67943 - r67958;
        double r67960 = r67959 / r67949;
        double r67961 = 1.0;
        double r67962 = r67924 / r67933;
        double r67963 = r67929 - r67962;
        double r67964 = r67961 * r67963;
        double r67965 = r67954 ? r67960 : r67964;
        double r67966 = r67952 ? r67930 : r67965;
        double r67967 = r67932 ? r67950 : r67966;
        double r67968 = r67926 ? r67930 : r67967;
        return r67968;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original34.0
Target20.9
Herbie9.6
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \mathbf{else}:\\ \;\;\;\;\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 4 regimes
  2. if b < -3.438870219673744e+36 or -9.940959811381676e-96 < b < -6.373481960958038e-132

    1. Initial program 54.0

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

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

    if -3.438870219673744e+36 < b < -9.940959811381676e-96

    1. Initial program 41.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 flip--41.4

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

      \[\leadsto \frac{\frac{\color{blue}{0 + \left(a \cdot c\right) \cdot 4}}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\]
    5. Simplified17.1

      \[\leadsto \frac{\frac{0 + \left(a \cdot c\right) \cdot 4}{\color{blue}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}}{2 \cdot a}\]
    6. Using strategy rm
    7. Applied add-cube-cbrt17.3

      \[\leadsto \frac{\frac{0 + \left(a \cdot c\right) \cdot 4}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - \color{blue}{\left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right) \cdot \sqrt[3]{b}}}}{2 \cdot a}\]
    8. Applied add-cube-cbrt17.5

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

      \[\leadsto \frac{\frac{0 + \left(a \cdot c\right) \cdot 4}{\color{blue}{\sqrt{\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)} \cdot \sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}} \cdot \sqrt{\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}}} - \left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right) \cdot \sqrt[3]{b}}}{2 \cdot a}\]
    10. Applied prod-diff17.5

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

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

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

    if -6.373481960958038e-132 < b < 2.9725940607578363e+74

    1. Initial program 11.6

      \[\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*11.6

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

    if 2.9725940607578363e+74 < b

    1. Initial program 41.8

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

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

      \[\leadsto \color{blue}{1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification9.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3438870219673743856300090597329338368:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -9.940959811381675939988945669030883027544 \cdot 10^{-96}:\\ \;\;\;\;\frac{\frac{\left(a \cdot c\right) \cdot 4}{\mathsf{fma}\left(\left|\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right|, \sqrt{\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}}, -b\right) + \left(\left(-b\right) + b\right)}}{2 \cdot a}\\ \mathbf{elif}\;b \le -6.373481960958038092461518588786337642855 \cdot 10^{-132}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.972594060757836305384453450333248094101 \cdot 10^{74}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019322 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"
  :precision binary64

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

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