Average Error: 33.4 → 15.2
Time: 23.3s
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 -1.877074429265673 \cdot 10^{+148}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{a \cdot c}{b}, \frac{3}{2}, b \cdot -2\right)}{a \cdot 3}\\ \mathbf{elif}\;b \le 2.1188761372830013 \cdot 10^{-69}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)} - b}{3}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a \cdot c}{b} \cdot \frac{-3}{2}}{a \cdot 3}\\ \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 -1.877074429265673 \cdot 10^{+148}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{a \cdot c}{b}, \frac{3}{2}, b \cdot -2\right)}{a \cdot 3}\\

\mathbf{elif}\;b \le 2.1188761372830013 \cdot 10^{-69}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)} - b}{3}}{a}\\

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

\end{array}
double f(double a, double b, double c) {
        double r4593187 = b;
        double r4593188 = -r4593187;
        double r4593189 = r4593187 * r4593187;
        double r4593190 = 3.0;
        double r4593191 = a;
        double r4593192 = r4593190 * r4593191;
        double r4593193 = c;
        double r4593194 = r4593192 * r4593193;
        double r4593195 = r4593189 - r4593194;
        double r4593196 = sqrt(r4593195);
        double r4593197 = r4593188 + r4593196;
        double r4593198 = r4593197 / r4593192;
        return r4593198;
}

double f(double a, double b, double c) {
        double r4593199 = b;
        double r4593200 = -1.877074429265673e+148;
        bool r4593201 = r4593199 <= r4593200;
        double r4593202 = a;
        double r4593203 = c;
        double r4593204 = r4593202 * r4593203;
        double r4593205 = r4593204 / r4593199;
        double r4593206 = 1.5;
        double r4593207 = -2.0;
        double r4593208 = r4593199 * r4593207;
        double r4593209 = fma(r4593205, r4593206, r4593208);
        double r4593210 = 3.0;
        double r4593211 = r4593202 * r4593210;
        double r4593212 = r4593209 / r4593211;
        double r4593213 = 2.1188761372830013e-69;
        bool r4593214 = r4593199 <= r4593213;
        double r4593215 = -3.0;
        double r4593216 = r4593199 * r4593199;
        double r4593217 = fma(r4593215, r4593204, r4593216);
        double r4593218 = sqrt(r4593217);
        double r4593219 = r4593218 - r4593199;
        double r4593220 = r4593219 / r4593210;
        double r4593221 = r4593220 / r4593202;
        double r4593222 = -1.5;
        double r4593223 = r4593205 * r4593222;
        double r4593224 = r4593223 / r4593211;
        double r4593225 = r4593214 ? r4593221 : r4593224;
        double r4593226 = r4593201 ? r4593212 : r4593225;
        return r4593226;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -1.877074429265673e+148

    1. Initial program 58.6

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\frac{a \cdot c}{b}, \frac{3}{2}, b \cdot -2\right)}}{3 \cdot a}\]

    if -1.877074429265673e+148 < b < 2.1188761372830013e-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. Simplified12.6

      \[\leadsto \color{blue}{\frac{\sqrt{\mathsf{fma}\left(-3, c \cdot a, b \cdot b\right)} - b}{3 \cdot a}}\]
    3. Using strategy rm
    4. Applied associate-/r*12.6

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

    if 2.1188761372830013e-69 < b

    1. Initial program 52.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.877074429265673 \cdot 10^{+148}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{a \cdot c}{b}, \frac{3}{2}, b \cdot -2\right)}{a \cdot 3}\\ \mathbf{elif}\;b \le 2.1188761372830013 \cdot 10^{-69}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)} - b}{3}}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a \cdot c}{b} \cdot \frac{-3}{2}}{a \cdot 3}\\ \end{array}\]

Reproduce

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