Average Error: 34.3 → 9.6
Time: 16.7s
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.303779241097880191978502132703296326983 \cdot 10^{138}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - \frac{b}{a} \cdot 0.6666666666666666296592325124947819858789\\ \mathbf{elif}\;b \le 4.626043257219637986942022736183111936335 \cdot 10^{-62}:\\ \;\;\;\;\frac{1}{a \cdot 3} \cdot \left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(a \cdot 3\right)}\right)\\ \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 -2.303779241097880191978502132703296326983 \cdot 10^{138}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - \frac{b}{a} \cdot 0.6666666666666666296592325124947819858789\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r2955152 = b;
        double r2955153 = -r2955152;
        double r2955154 = r2955152 * r2955152;
        double r2955155 = 3.0;
        double r2955156 = a;
        double r2955157 = r2955155 * r2955156;
        double r2955158 = c;
        double r2955159 = r2955157 * r2955158;
        double r2955160 = r2955154 - r2955159;
        double r2955161 = sqrt(r2955160);
        double r2955162 = r2955153 + r2955161;
        double r2955163 = r2955162 / r2955157;
        return r2955163;
}

double f(double a, double b, double c) {
        double r2955164 = b;
        double r2955165 = -2.3037792410978802e+138;
        bool r2955166 = r2955164 <= r2955165;
        double r2955167 = 0.5;
        double r2955168 = c;
        double r2955169 = r2955168 / r2955164;
        double r2955170 = r2955167 * r2955169;
        double r2955171 = a;
        double r2955172 = r2955164 / r2955171;
        double r2955173 = 0.6666666666666666;
        double r2955174 = r2955172 * r2955173;
        double r2955175 = r2955170 - r2955174;
        double r2955176 = 4.626043257219638e-62;
        bool r2955177 = r2955164 <= r2955176;
        double r2955178 = 1.0;
        double r2955179 = 3.0;
        double r2955180 = r2955171 * r2955179;
        double r2955181 = r2955178 / r2955180;
        double r2955182 = -r2955164;
        double r2955183 = r2955164 * r2955164;
        double r2955184 = r2955168 * r2955180;
        double r2955185 = r2955183 - r2955184;
        double r2955186 = sqrt(r2955185);
        double r2955187 = r2955182 + r2955186;
        double r2955188 = r2955181 * r2955187;
        double r2955189 = -0.5;
        double r2955190 = r2955169 * r2955189;
        double r2955191 = r2955177 ? r2955188 : r2955190;
        double r2955192 = r2955166 ? r2955175 : r2955191;
        return r2955192;
}

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 < -2.3037792410978802e+138

    1. Initial program 58.5

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

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

    if -2.3037792410978802e+138 < b < 4.626043257219638e-62

    1. Initial program 12.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied div-inv12.4

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

    if 4.626043257219638e-62 < b

    1. Initial program 53.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.303779241097880191978502132703296326983 \cdot 10^{138}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - \frac{b}{a} \cdot 0.6666666666666666296592325124947819858789\\ \mathbf{elif}\;b \le 4.626043257219637986942022736183111936335 \cdot 10^{-62}:\\ \;\;\;\;\frac{1}{a \cdot 3} \cdot \left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(a \cdot 3\right)}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot -0.5\\ \end{array}\]

Reproduce

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