Average Error: 52.6 → 5.7
Time: 17.1s
Precision: 64
\[4.930380657631324 \cdot 10^{-32} \lt a \lt 2.028240960365167 \cdot 10^{+31} \land 4.930380657631324 \cdot 10^{-32} \lt b \lt 2.028240960365167 \cdot 10^{+31} \land 4.930380657631324 \cdot 10^{-32} \lt c \lt 2.028240960365167 \cdot 10^{+31}\]
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + \left(-b\right)}{3 \cdot a} \le -6345072.402882894:\\ \;\;\;\;\frac{\sqrt[3]{\left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right) \cdot \left(\left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right) \cdot \left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right)\right)}}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\ \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}\;\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + \left(-b\right)}{3 \cdot a} \le -6345072.402882894:\\
\;\;\;\;\frac{\sqrt[3]{\left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right) \cdot \left(\left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right) \cdot \left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right)\right)}}{3 \cdot a}\\

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

\end{array}
double f(double a, double b, double c) {
        double r2698219 = b;
        double r2698220 = -r2698219;
        double r2698221 = r2698219 * r2698219;
        double r2698222 = 3.0;
        double r2698223 = a;
        double r2698224 = r2698222 * r2698223;
        double r2698225 = c;
        double r2698226 = r2698224 * r2698225;
        double r2698227 = r2698221 - r2698226;
        double r2698228 = sqrt(r2698227);
        double r2698229 = r2698220 + r2698228;
        double r2698230 = r2698229 / r2698224;
        return r2698230;
}

double f(double a, double b, double c) {
        double r2698231 = b;
        double r2698232 = r2698231 * r2698231;
        double r2698233 = 3.0;
        double r2698234 = a;
        double r2698235 = r2698233 * r2698234;
        double r2698236 = c;
        double r2698237 = r2698235 * r2698236;
        double r2698238 = r2698232 - r2698237;
        double r2698239 = sqrt(r2698238);
        double r2698240 = -r2698231;
        double r2698241 = r2698239 + r2698240;
        double r2698242 = r2698241 / r2698235;
        double r2698243 = -6345072.402882894;
        bool r2698244 = r2698242 <= r2698243;
        double r2698245 = -3.0;
        double r2698246 = r2698245 * r2698234;
        double r2698247 = fma(r2698236, r2698246, r2698232);
        double r2698248 = sqrt(r2698247);
        double r2698249 = r2698248 - r2698231;
        double r2698250 = r2698249 * r2698249;
        double r2698251 = r2698249 * r2698250;
        double r2698252 = cbrt(r2698251);
        double r2698253 = r2698252 / r2698235;
        double r2698254 = r2698236 / r2698231;
        double r2698255 = -0.5;
        double r2698256 = r2698254 * r2698255;
        double r2698257 = r2698244 ? r2698253 : r2698256;
        return r2698257;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 2 regimes
  2. if (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)) < -6345072.402882894

    1. Initial program 21.1

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied add-cbrt-cube21.1

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

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

    if -6345072.402882894 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a))

    1. Initial program 54.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + \left(-b\right)}{3 \cdot a} \le -6345072.402882894:\\ \;\;\;\;\frac{\sqrt[3]{\left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right) \cdot \left(\left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right) \cdot \left(\sqrt{\mathsf{fma}\left(c, -3 \cdot a, b \cdot b\right)} - b\right)\right)}}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (a b c)
  :name "Cubic critical, wide range"
  :pre (and (< 4.930380657631324e-32 a 2.028240960365167e+31) (< 4.930380657631324e-32 b 2.028240960365167e+31) (< 4.930380657631324e-32 c 2.028240960365167e+31))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))