Average Error: 33.6 → 10.5
Time: 13.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 -8.524209272776799353303041221819293619772 \cdot 10^{66}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 1.021331828433541113521774124176081265272 \cdot 10^{-114}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot 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 -8.524209272776799353303041221819293619772 \cdot 10^{66}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r93563 = b;
        double r93564 = -r93563;
        double r93565 = r93563 * r93563;
        double r93566 = 3.0;
        double r93567 = a;
        double r93568 = r93566 * r93567;
        double r93569 = c;
        double r93570 = r93568 * r93569;
        double r93571 = r93565 - r93570;
        double r93572 = sqrt(r93571);
        double r93573 = r93564 + r93572;
        double r93574 = r93573 / r93568;
        return r93574;
}

double f(double a, double b, double c) {
        double r93575 = b;
        double r93576 = -8.5242092727768e+66;
        bool r93577 = r93575 <= r93576;
        double r93578 = 0.5;
        double r93579 = c;
        double r93580 = r93579 / r93575;
        double r93581 = r93578 * r93580;
        double r93582 = 0.6666666666666666;
        double r93583 = a;
        double r93584 = r93575 / r93583;
        double r93585 = r93582 * r93584;
        double r93586 = r93581 - r93585;
        double r93587 = 1.0213318284335411e-114;
        bool r93588 = r93575 <= r93587;
        double r93589 = -r93575;
        double r93590 = r93575 * r93575;
        double r93591 = 3.0;
        double r93592 = r93591 * r93583;
        double r93593 = r93592 * r93579;
        double r93594 = r93590 - r93593;
        double r93595 = sqrt(r93594);
        double r93596 = r93589 + r93595;
        double r93597 = r93596 / r93592;
        double r93598 = -0.5;
        double r93599 = r93598 * r93580;
        double r93600 = r93588 ? r93597 : r93599;
        double r93601 = r93577 ? r93586 : r93600;
        return r93601;
}

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 < -8.5242092727768e+66

    1. Initial program 40.5

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

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

    if -8.5242092727768e+66 < b < 1.0213318284335411e-114

    1. Initial program 12.2

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

    if 1.0213318284335411e-114 < b

    1. Initial program 51.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -8.524209272776799353303041221819293619772 \cdot 10^{66}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 1.021331828433541113521774124176081265272 \cdot 10^{-114}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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