Average Error: 33.9 → 9.8
Time: 13.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 -3.0165216367200194 \cdot 10^{+142}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b}, \frac{b}{a} \cdot \frac{-2}{3}\right)\\ \mathbf{elif}\;b \le 1.4064974064077476 \cdot 10^{-77}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} - b}}\\ \mathbf{elif}\;b \le 1.56232019487653 \cdot 10^{-25}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.8123237256202247 \cdot 10^{-16}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right) \cdot \sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)}, \sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} + b, b \cdot b\right)}}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \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.0165216367200194 \cdot 10^{+142}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b}, \frac{b}{a} \cdot \frac{-2}{3}\right)\\

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

\mathbf{elif}\;b \le 1.56232019487653 \cdot 10^{-25}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r1684465 = b;
        double r1684466 = -r1684465;
        double r1684467 = r1684465 * r1684465;
        double r1684468 = 3.0;
        double r1684469 = a;
        double r1684470 = r1684468 * r1684469;
        double r1684471 = c;
        double r1684472 = r1684470 * r1684471;
        double r1684473 = r1684467 - r1684472;
        double r1684474 = sqrt(r1684473);
        double r1684475 = r1684466 + r1684474;
        double r1684476 = r1684475 / r1684470;
        return r1684476;
}

double f(double a, double b, double c) {
        double r1684477 = b;
        double r1684478 = -3.0165216367200194e+142;
        bool r1684479 = r1684477 <= r1684478;
        double r1684480 = 0.5;
        double r1684481 = c;
        double r1684482 = r1684481 / r1684477;
        double r1684483 = a;
        double r1684484 = r1684477 / r1684483;
        double r1684485 = -0.6666666666666666;
        double r1684486 = r1684484 * r1684485;
        double r1684487 = fma(r1684480, r1684482, r1684486);
        double r1684488 = 1.4064974064077476e-77;
        bool r1684489 = r1684477 <= r1684488;
        double r1684490 = 1.0;
        double r1684491 = 3.0;
        double r1684492 = r1684491 * r1684483;
        double r1684493 = r1684483 * r1684481;
        double r1684494 = -3.0;
        double r1684495 = r1684493 * r1684494;
        double r1684496 = fma(r1684477, r1684477, r1684495);
        double r1684497 = sqrt(r1684496);
        double r1684498 = r1684497 - r1684477;
        double r1684499 = r1684492 / r1684498;
        double r1684500 = r1684490 / r1684499;
        double r1684501 = 1.56232019487653e-25;
        bool r1684502 = r1684477 <= r1684501;
        double r1684503 = -0.5;
        double r1684504 = r1684503 * r1684482;
        double r1684505 = 2.8123237256202247e-16;
        bool r1684506 = r1684477 <= r1684505;
        double r1684507 = r1684496 * r1684497;
        double r1684508 = r1684477 * r1684477;
        double r1684509 = r1684508 * r1684477;
        double r1684510 = r1684507 - r1684509;
        double r1684511 = r1684497 + r1684477;
        double r1684512 = fma(r1684497, r1684511, r1684508);
        double r1684513 = r1684510 / r1684512;
        double r1684514 = r1684513 / r1684492;
        double r1684515 = r1684506 ? r1684514 : r1684504;
        double r1684516 = r1684502 ? r1684504 : r1684515;
        double r1684517 = r1684489 ? r1684500 : r1684516;
        double r1684518 = r1684479 ? r1684487 : r1684517;
        return r1684518;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 4 regimes
  2. if b < -3.0165216367200194e+142

    1. Initial program 57.6

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

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

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

    if -3.0165216367200194e+142 < b < 1.4064974064077476e-77

    1. Initial program 11.9

      \[\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-num12.0

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

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

    if 1.4064974064077476e-77 < b < 1.56232019487653e-25 or 2.8123237256202247e-16 < b

    1. Initial program 53.3

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

      \[\leadsto \color{blue}{\frac{-1}{2} \cdot \frac{c}{b}}\]

    if 1.56232019487653e-25 < b < 2.8123237256202247e-16

    1. Initial program 42.8

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

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

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

      \[\leadsto \frac{\frac{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right) \cdot \sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} - \left(b \cdot b\right) \cdot b}{\color{blue}{\mathsf{fma}\left(\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)}, \sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} + b, b \cdot b\right)}}}{3 \cdot a}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification9.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.0165216367200194 \cdot 10^{+142}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b}, \frac{b}{a} \cdot \frac{-2}{3}\right)\\ \mathbf{elif}\;b \le 1.4064974064077476 \cdot 10^{-77}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} - b}}\\ \mathbf{elif}\;b \le 1.56232019487653 \cdot 10^{-25}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.8123237256202247 \cdot 10^{-16}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right) \cdot \sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} - \left(b \cdot b\right) \cdot b}{\mathsf{fma}\left(\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)}, \sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot -3\right)} + b, b \cdot b\right)}}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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