Average Error: 33.6 → 14.6
Time: 21.9s
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 -4.898678560179045 \cdot 10^{+152}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{3}{2}, \frac{a}{b} \cdot c, b \cdot -2\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le 1.487621333916267 \cdot 10^{+25}:\\ \;\;\;\;\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot a\right) \cdot -3\right)} + \left(-b\right)}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{-3}{2} \cdot \frac{c \cdot a}{b}}{3 \cdot a}\\ \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 -4.898678560179045 \cdot 10^{+152}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{3}{2}, \frac{a}{b} \cdot c, b \cdot -2\right)}{3 \cdot a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r3727220 = b;
        double r3727221 = -r3727220;
        double r3727222 = r3727220 * r3727220;
        double r3727223 = 3.0;
        double r3727224 = a;
        double r3727225 = r3727223 * r3727224;
        double r3727226 = c;
        double r3727227 = r3727225 * r3727226;
        double r3727228 = r3727222 - r3727227;
        double r3727229 = sqrt(r3727228);
        double r3727230 = r3727221 + r3727229;
        double r3727231 = r3727230 / r3727225;
        return r3727231;
}

double f(double a, double b, double c) {
        double r3727232 = b;
        double r3727233 = -4.898678560179045e+152;
        bool r3727234 = r3727232 <= r3727233;
        double r3727235 = 1.5;
        double r3727236 = a;
        double r3727237 = r3727236 / r3727232;
        double r3727238 = c;
        double r3727239 = r3727237 * r3727238;
        double r3727240 = -2.0;
        double r3727241 = r3727232 * r3727240;
        double r3727242 = fma(r3727235, r3727239, r3727241);
        double r3727243 = 3.0;
        double r3727244 = r3727243 * r3727236;
        double r3727245 = r3727242 / r3727244;
        double r3727246 = 1.487621333916267e+25;
        bool r3727247 = r3727232 <= r3727246;
        double r3727248 = r3727238 * r3727236;
        double r3727249 = -3.0;
        double r3727250 = r3727248 * r3727249;
        double r3727251 = fma(r3727232, r3727232, r3727250);
        double r3727252 = sqrt(r3727251);
        double r3727253 = -r3727232;
        double r3727254 = r3727252 + r3727253;
        double r3727255 = r3727254 / r3727244;
        double r3727256 = -1.5;
        double r3727257 = r3727248 / r3727232;
        double r3727258 = r3727256 * r3727257;
        double r3727259 = r3727258 / r3727244;
        double r3727260 = r3727247 ? r3727255 : r3727259;
        double r3727261 = r3727234 ? r3727245 : r3727260;
        return r3727261;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -4.898678560179045e+152

    1. Initial program 60.5

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

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

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

    if -4.898678560179045e+152 < b < 1.487621333916267e+25

    1. Initial program 16.2

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

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

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

    if 1.487621333916267e+25 < b

    1. Initial program 55.6

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

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

      \[\leadsto \frac{\left(-b\right) + \sqrt{\color{blue}{\mathsf{fma}\left(b, b, -3 \cdot \left(a \cdot c\right)\right)}}}{3 \cdot a}\]
    4. Taylor expanded around inf 16.1

      \[\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 simplification14.6

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

Reproduce

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