Average Error: 34.5 → 10.2
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.22069661098510164 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 2.6814156115033013 \cdot 10^{-110}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}\\ \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.22069661098510164 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r101169 = b;
        double r101170 = -r101169;
        double r101171 = r101169 * r101169;
        double r101172 = 3.0;
        double r101173 = a;
        double r101174 = r101172 * r101173;
        double r101175 = c;
        double r101176 = r101174 * r101175;
        double r101177 = r101171 - r101176;
        double r101178 = sqrt(r101177);
        double r101179 = r101170 + r101178;
        double r101180 = r101179 / r101174;
        return r101180;
}

double f(double a, double b, double c) {
        double r101181 = b;
        double r101182 = -3.2206966109851016e+150;
        bool r101183 = r101181 <= r101182;
        double r101184 = 0.5;
        double r101185 = c;
        double r101186 = r101185 / r101181;
        double r101187 = r101184 * r101186;
        double r101188 = 0.6666666666666666;
        double r101189 = a;
        double r101190 = r101181 / r101189;
        double r101191 = r101188 * r101190;
        double r101192 = r101187 - r101191;
        double r101193 = 2.6814156115033013e-110;
        bool r101194 = r101181 <= r101193;
        double r101195 = 1.0;
        double r101196 = 3.0;
        double r101197 = r101196 * r101189;
        double r101198 = -r101181;
        double r101199 = r101181 * r101181;
        double r101200 = r101197 * r101185;
        double r101201 = r101199 - r101200;
        double r101202 = sqrt(r101201);
        double r101203 = r101198 + r101202;
        double r101204 = r101197 / r101203;
        double r101205 = r101195 / r101204;
        double r101206 = -0.5;
        double r101207 = r101206 * r101186;
        double r101208 = r101194 ? r101205 : r101207;
        double r101209 = r101183 ? r101192 : r101208;
        return r101209;
}

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.2206966109851016e+150

    1. Initial program 62.4

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

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

    if -3.2206966109851016e+150 < b < 2.6814156115033013e-110

    1. Initial program 11.7

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

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

    if 2.6814156115033013e-110 < b

    1. Initial program 52.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.22069661098510164 \cdot 10^{150}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 2.6814156115033013 \cdot 10^{-110}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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