Average Error: 33.2 → 10.1
Time: 20.4s
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 -7.645130993934684 \cdot 10^{+108}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\ \mathbf{elif}\;b \le 1.7070929733814247 \cdot 10^{-109}:\\ \;\;\;\;\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} - \frac{b}{3 \cdot a}\\ \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 -7.645130993934684 \cdot 10^{+108}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r4430102 = b;
        double r4430103 = -r4430102;
        double r4430104 = r4430102 * r4430102;
        double r4430105 = 3.0;
        double r4430106 = a;
        double r4430107 = r4430105 * r4430106;
        double r4430108 = c;
        double r4430109 = r4430107 * r4430108;
        double r4430110 = r4430104 - r4430109;
        double r4430111 = sqrt(r4430110);
        double r4430112 = r4430103 + r4430111;
        double r4430113 = r4430112 / r4430107;
        return r4430113;
}

double f(double a, double b, double c) {
        double r4430114 = b;
        double r4430115 = -7.645130993934684e+108;
        bool r4430116 = r4430114 <= r4430115;
        double r4430117 = 0.5;
        double r4430118 = c;
        double r4430119 = r4430118 / r4430114;
        double r4430120 = r4430117 * r4430119;
        double r4430121 = a;
        double r4430122 = r4430114 / r4430121;
        double r4430123 = 0.6666666666666666;
        double r4430124 = r4430122 * r4430123;
        double r4430125 = r4430120 - r4430124;
        double r4430126 = 1.7070929733814247e-109;
        bool r4430127 = r4430114 <= r4430126;
        double r4430128 = r4430114 * r4430114;
        double r4430129 = 3.0;
        double r4430130 = r4430129 * r4430121;
        double r4430131 = r4430130 * r4430118;
        double r4430132 = r4430128 - r4430131;
        double r4430133 = sqrt(r4430132);
        double r4430134 = r4430133 / r4430130;
        double r4430135 = r4430114 / r4430130;
        double r4430136 = r4430134 - r4430135;
        double r4430137 = -0.5;
        double r4430138 = r4430137 * r4430119;
        double r4430139 = r4430127 ? r4430136 : r4430138;
        double r4430140 = r4430116 ? r4430125 : r4430139;
        return r4430140;
}

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 < -7.645130993934684e+108

    1. Initial program 46.7

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Simplified46.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 4.0

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

    if -7.645130993934684e+108 < b < 1.7070929733814247e-109

    1. Initial program 11.5

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

      \[\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 div-sub11.5

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

    if 1.7070929733814247e-109 < b

    1. Initial program 51.0

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -7.645130993934684 \cdot 10^{+108}:\\ \;\;\;\;\frac{1}{2} \cdot \frac{c}{b} - \frac{b}{a} \cdot \frac{2}{3}\\ \mathbf{elif}\;b \le 1.7070929733814247 \cdot 10^{-109}:\\ \;\;\;\;\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a} - \frac{b}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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