Average Error: 34.6 → 9.9
Time: 4.5s
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 -3.00946394615636034 \cdot 10^{149}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 9.39036747108992214 \cdot 10^{-69}:\\ \;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3}}{a}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \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 -3.00946394615636034 \cdot 10^{149}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r113596 = b;
        double r113597 = -r113596;
        double r113598 = r113596 * r113596;
        double r113599 = 3.0;
        double r113600 = a;
        double r113601 = r113599 * r113600;
        double r113602 = c;
        double r113603 = r113601 * r113602;
        double r113604 = r113598 - r113603;
        double r113605 = sqrt(r113604);
        double r113606 = r113597 + r113605;
        double r113607 = r113606 / r113601;
        return r113607;
}

double f(double a, double b, double c) {
        double r113608 = b;
        double r113609 = -3.0094639461563603e+149;
        bool r113610 = r113608 <= r113609;
        double r113611 = 0.5;
        double r113612 = c;
        double r113613 = r113612 / r113608;
        double r113614 = r113611 * r113613;
        double r113615 = 0.6666666666666666;
        double r113616 = a;
        double r113617 = r113608 / r113616;
        double r113618 = r113615 * r113617;
        double r113619 = r113614 - r113618;
        double r113620 = 9.390367471089922e-69;
        bool r113621 = r113608 <= r113620;
        double r113622 = -r113608;
        double r113623 = r113608 * r113608;
        double r113624 = 3.0;
        double r113625 = r113624 * r113616;
        double r113626 = r113625 * r113612;
        double r113627 = r113623 - r113626;
        double r113628 = sqrt(r113627);
        double r113629 = r113622 + r113628;
        double r113630 = r113629 / r113624;
        double r113631 = r113630 / r113616;
        double r113632 = -0.5;
        double r113633 = r113632 * r113613;
        double r113634 = r113621 ? r113631 : r113633;
        double r113635 = r113610 ? r113619 : r113634;
        return r113635;
}

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 < -3.0094639461563603e+149

    1. Initial program 62.1

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

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

    if -3.0094639461563603e+149 < b < 9.390367471089922e-69

    1. Initial program 12.6

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied associate-/r*12.6

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

    if 9.390367471089922e-69 < b

    1. Initial program 53.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.00946394615636034 \cdot 10^{149}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 9.39036747108992214 \cdot 10^{-69}:\\ \;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3}}{a}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2020018 +o rules:numerics
(FPCore (a b c)
  :name "Cubic critical"
  :precision binary64
  (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))