Average Error: 33.4 → 14.5
Time: 24.7s
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 -5.148407540792454 \cdot 10^{+110}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{3}{2}, \frac{a}{b} \cdot c, b \cdot -2\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le 3.32629031803127 \cdot 10^{-71}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(-3, c \cdot a, b \cdot b\right)} - b}{3}}{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 -5.148407540792454 \cdot 10^{+110}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{3}{2}, \frac{a}{b} \cdot c, b \cdot -2\right)}{3 \cdot a}\\

\mathbf{elif}\;b \le 3.32629031803127 \cdot 10^{-71}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(-3, c \cdot a, b \cdot b\right)} - b}{3}}{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 r3180634 = b;
        double r3180635 = -r3180634;
        double r3180636 = r3180634 * r3180634;
        double r3180637 = 3.0;
        double r3180638 = a;
        double r3180639 = r3180637 * r3180638;
        double r3180640 = c;
        double r3180641 = r3180639 * r3180640;
        double r3180642 = r3180636 - r3180641;
        double r3180643 = sqrt(r3180642);
        double r3180644 = r3180635 + r3180643;
        double r3180645 = r3180644 / r3180639;
        return r3180645;
}

double f(double a, double b, double c) {
        double r3180646 = b;
        double r3180647 = -5.148407540792454e+110;
        bool r3180648 = r3180646 <= r3180647;
        double r3180649 = 1.5;
        double r3180650 = a;
        double r3180651 = r3180650 / r3180646;
        double r3180652 = c;
        double r3180653 = r3180651 * r3180652;
        double r3180654 = -2.0;
        double r3180655 = r3180646 * r3180654;
        double r3180656 = fma(r3180649, r3180653, r3180655);
        double r3180657 = 3.0;
        double r3180658 = r3180657 * r3180650;
        double r3180659 = r3180656 / r3180658;
        double r3180660 = 3.32629031803127e-71;
        bool r3180661 = r3180646 <= r3180660;
        double r3180662 = -3.0;
        double r3180663 = r3180652 * r3180650;
        double r3180664 = r3180646 * r3180646;
        double r3180665 = fma(r3180662, r3180663, r3180664);
        double r3180666 = sqrt(r3180665);
        double r3180667 = r3180666 - r3180646;
        double r3180668 = r3180667 / r3180657;
        double r3180669 = r3180668 / r3180650;
        double r3180670 = -1.5;
        double r3180671 = r3180663 / r3180646;
        double r3180672 = r3180670 * r3180671;
        double r3180673 = r3180672 / r3180658;
        double r3180674 = r3180661 ? r3180669 : r3180673;
        double r3180675 = r3180648 ? r3180659 : r3180674;
        return r3180675;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -5.148407540792454e+110

    1. Initial program 47.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.0

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

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

    if -5.148407540792454e+110 < b < 3.32629031803127e-71

    1. Initial program 13.0

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

      \[\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*13.0

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

    if 3.32629031803127e-71 < b

    1. Initial program 52.6

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

      \[\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.5

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

Reproduce

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