Average Error: 34.0 → 10.4
Time: 19.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 -1.006124725233072906597672755451758607334 \cdot 10^{153}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - \frac{b}{a} \cdot 0.6666666666666666296592325124947819858789\\ \mathbf{elif}\;b \le 6.407662420749314643846659194387390530859 \cdot 10^{-35}:\\ \;\;\;\;\frac{1}{3} \cdot \frac{\sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} - b}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot -0.5\\ \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 -1.006124725233072906597672755451758607334 \cdot 10^{153}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - \frac{b}{a} \cdot 0.6666666666666666296592325124947819858789\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r5198679 = b;
        double r5198680 = -r5198679;
        double r5198681 = r5198679 * r5198679;
        double r5198682 = 3.0;
        double r5198683 = a;
        double r5198684 = r5198682 * r5198683;
        double r5198685 = c;
        double r5198686 = r5198684 * r5198685;
        double r5198687 = r5198681 - r5198686;
        double r5198688 = sqrt(r5198687);
        double r5198689 = r5198680 + r5198688;
        double r5198690 = r5198689 / r5198684;
        return r5198690;
}

double f(double a, double b, double c) {
        double r5198691 = b;
        double r5198692 = -1.0061247252330729e+153;
        bool r5198693 = r5198691 <= r5198692;
        double r5198694 = 0.5;
        double r5198695 = c;
        double r5198696 = r5198695 / r5198691;
        double r5198697 = r5198694 * r5198696;
        double r5198698 = a;
        double r5198699 = r5198691 / r5198698;
        double r5198700 = 0.6666666666666666;
        double r5198701 = r5198699 * r5198700;
        double r5198702 = r5198697 - r5198701;
        double r5198703 = 6.407662420749315e-35;
        bool r5198704 = r5198691 <= r5198703;
        double r5198705 = 1.0;
        double r5198706 = 3.0;
        double r5198707 = r5198705 / r5198706;
        double r5198708 = r5198691 * r5198691;
        double r5198709 = r5198706 * r5198698;
        double r5198710 = r5198695 * r5198709;
        double r5198711 = r5198708 - r5198710;
        double r5198712 = sqrt(r5198711);
        double r5198713 = r5198712 - r5198691;
        double r5198714 = r5198713 / r5198698;
        double r5198715 = r5198707 * r5198714;
        double r5198716 = -0.5;
        double r5198717 = r5198696 * r5198716;
        double r5198718 = r5198704 ? r5198715 : r5198717;
        double r5198719 = r5198693 ? r5198702 : r5198718;
        return r5198719;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if b < -1.0061247252330729e+153

    1. Initial program 63.7

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

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

      \[\leadsto \color{blue}{0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}}\]

    if -1.0061247252330729e+153 < b < 6.407662420749315e-35

    1. Initial program 14.0

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

      \[\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-identity14.0

      \[\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 times-frac14.1

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

    if 6.407662420749315e-35 < b

    1. Initial program 54.6

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

      \[\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.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.006124725233072906597672755451758607334 \cdot 10^{153}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - \frac{b}{a} \cdot 0.6666666666666666296592325124947819858789\\ \mathbf{elif}\;b \le 6.407662420749314643846659194387390530859 \cdot 10^{-35}:\\ \;\;\;\;\frac{1}{3} \cdot \frac{\sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} - b}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot -0.5\\ \end{array}\]

Reproduce

herbie shell --seed 2019169 
(FPCore (a b c)
  :name "Cubic critical"
  (/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)))