Average Error: 33.5 → 10.2
Time: 20.6s
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -2.5522742984076443 \cdot 10^{+116}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\ \mathbf{elif}\;b \le 2.590061654194537 \cdot 10^{-84}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\ \mathbf{elif}\;b \le 9.132523931635255 \cdot 10^{-77}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.0133162233951682 \cdot 10^{-44}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -2.5522742984076443 \cdot 10^{+116}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\

\mathbf{elif}\;b \le 2.590061654194537 \cdot 10^{-84}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\

\mathbf{elif}\;b \le 9.132523931635255 \cdot 10^{-77}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 2.0133162233951682 \cdot 10^{-44}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\

\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\

\end{array}
double f(double a, double b, double c, double __attribute__((unused)) d) {
        double r3330707 = b;
        double r3330708 = -r3330707;
        double r3330709 = r3330707 * r3330707;
        double r3330710 = 3.0;
        double r3330711 = a;
        double r3330712 = r3330710 * r3330711;
        double r3330713 = c;
        double r3330714 = r3330712 * r3330713;
        double r3330715 = r3330709 - r3330714;
        double r3330716 = sqrt(r3330715);
        double r3330717 = r3330708 + r3330716;
        double r3330718 = r3330717 / r3330712;
        return r3330718;
}

double f(double a, double b, double c, double __attribute__((unused)) d) {
        double r3330719 = b;
        double r3330720 = -2.5522742984076443e+116;
        bool r3330721 = r3330719 <= r3330720;
        double r3330722 = 0.5;
        double r3330723 = c;
        double r3330724 = r3330723 / r3330719;
        double r3330725 = r3330722 * r3330724;
        double r3330726 = a;
        double r3330727 = r3330719 / r3330726;
        double r3330728 = 0.6666666666666666;
        double r3330729 = r3330727 * r3330728;
        double r3330730 = r3330725 - r3330729;
        double r3330731 = 2.590061654194537e-84;
        bool r3330732 = r3330719 <= r3330731;
        double r3330733 = 1.0;
        double r3330734 = 3.0;
        double r3330735 = r3330734 * r3330726;
        double r3330736 = r3330719 * r3330719;
        double r3330737 = r3330735 * r3330723;
        double r3330738 = r3330736 - r3330737;
        double r3330739 = sqrt(r3330738);
        double r3330740 = r3330739 - r3330719;
        double r3330741 = r3330735 / r3330740;
        double r3330742 = r3330733 / r3330741;
        double r3330743 = 9.132523931635255e-77;
        bool r3330744 = r3330719 <= r3330743;
        double r3330745 = -0.5;
        double r3330746 = r3330745 * r3330724;
        double r3330747 = 2.0133162233951682e-44;
        bool r3330748 = r3330719 <= r3330747;
        double r3330749 = r3330748 ? r3330742 : r3330746;
        double r3330750 = r3330744 ? r3330746 : r3330749;
        double r3330751 = r3330732 ? r3330742 : r3330750;
        double r3330752 = r3330721 ? r3330730 : r3330751;
        return r3330752;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus d

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if b < -2.5522742984076443e+116

    1. Initial program 47.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Simplified47.3

      \[\leadsto \color{blue}{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3 \cdot a}}\]
    3. Taylor expanded around -inf 4.1

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

    if -2.5522742984076443e+116 < b < 2.590061654194537e-84 or 9.132523931635255e-77 < b < 2.0133162233951682e-44

    1. Initial program 13.9

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Simplified13.9

      \[\leadsto \color{blue}{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3 \cdot a}}\]
    3. Using strategy rm
    4. Applied *-un-lft-identity13.9

      \[\leadsto \frac{\color{blue}{1 \cdot \left(\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b\right)}}{3 \cdot a}\]
    5. Applied associate-/l*14.0

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

    if 2.590061654194537e-84 < b < 9.132523931635255e-77 or 2.0133162233951682e-44 < b

    1. Initial program 53.4

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

      \[\leadsto \color{blue}{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3 \cdot a}}\]
    3. Taylor expanded around inf 7.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.5522742984076443 \cdot 10^{+116}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\ \mathbf{elif}\;b \le 2.590061654194537 \cdot 10^{-84}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\ \mathbf{elif}\;b \le 9.132523931635255 \cdot 10^{-77}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.0133162233951682 \cdot 10^{-44}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019129 
(FPCore (a b c d)
  :name "Cubic critical"
  (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))