Average Error: 33.2 → 9.0
Time: 21.4s
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 -7.397994825724217 \cdot 10^{+150}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{a}{\frac{b}{c}}, \frac{3}{2}, b \cdot -2\right)}{a \cdot 3}\\ \mathbf{elif}\;b \le 3.80416111172822 \cdot 10^{-128}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} - b}{3}}{a}\\ \mathbf{elif}\;b \le 3.633198732680569 \cdot 10^{-37}:\\ \;\;\;\;\frac{\frac{\frac{c}{\sqrt[3]{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} + b}} \cdot \frac{a \cdot -3}{\sqrt[3]{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} + b}}}{\sqrt[3]{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} + b}}}{a \cdot 3}\\ \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}\;b \le -7.397994825724217 \cdot 10^{+150}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{a}{\frac{b}{c}}, \frac{3}{2}, b \cdot -2\right)}{a \cdot 3}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r4323032 = b;
        double r4323033 = -r4323032;
        double r4323034 = r4323032 * r4323032;
        double r4323035 = 3.0;
        double r4323036 = a;
        double r4323037 = r4323035 * r4323036;
        double r4323038 = c;
        double r4323039 = r4323037 * r4323038;
        double r4323040 = r4323034 - r4323039;
        double r4323041 = sqrt(r4323040);
        double r4323042 = r4323033 + r4323041;
        double r4323043 = r4323042 / r4323037;
        return r4323043;
}

double f(double a, double b, double c) {
        double r4323044 = b;
        double r4323045 = -7.397994825724217e+150;
        bool r4323046 = r4323044 <= r4323045;
        double r4323047 = a;
        double r4323048 = c;
        double r4323049 = r4323044 / r4323048;
        double r4323050 = r4323047 / r4323049;
        double r4323051 = 1.5;
        double r4323052 = -2.0;
        double r4323053 = r4323044 * r4323052;
        double r4323054 = fma(r4323050, r4323051, r4323053);
        double r4323055 = 3.0;
        double r4323056 = r4323047 * r4323055;
        double r4323057 = r4323054 / r4323056;
        double r4323058 = 3.80416111172822e-128;
        bool r4323059 = r4323044 <= r4323058;
        double r4323060 = -3.0;
        double r4323061 = r4323047 * r4323060;
        double r4323062 = r4323044 * r4323044;
        double r4323063 = fma(r4323061, r4323048, r4323062);
        double r4323064 = sqrt(r4323063);
        double r4323065 = r4323064 - r4323044;
        double r4323066 = r4323065 / r4323055;
        double r4323067 = r4323066 / r4323047;
        double r4323068 = 3.633198732680569e-37;
        bool r4323069 = r4323044 <= r4323068;
        double r4323070 = r4323064 + r4323044;
        double r4323071 = cbrt(r4323070);
        double r4323072 = r4323048 / r4323071;
        double r4323073 = r4323061 / r4323071;
        double r4323074 = r4323072 * r4323073;
        double r4323075 = r4323074 / r4323071;
        double r4323076 = r4323075 / r4323056;
        double r4323077 = r4323048 / r4323044;
        double r4323078 = -0.5;
        double r4323079 = r4323077 * r4323078;
        double r4323080 = r4323069 ? r4323076 : r4323079;
        double r4323081 = r4323059 ? r4323067 : r4323080;
        double r4323082 = r4323046 ? r4323057 : r4323081;
        return r4323082;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 4 regimes
  2. if b < -7.397994825724217e+150

    1. Initial program 59.1

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

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

    if -7.397994825724217e+150 < b < 3.80416111172822e-128

    1. Initial program 10.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 associate-/r*10.8

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

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

    if 3.80416111172822e-128 < b < 3.633198732680569e-37

    1. Initial program 32.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 associate-/r*32.1

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

      \[\leadsto \frac{\color{blue}{\frac{\sqrt{\mathsf{fma}\left(-3 \cdot a, c, b \cdot b\right)} - b}{3}}}{a}\]
    5. Using strategy rm
    6. Applied associate-/l/32.1

      \[\leadsto \color{blue}{\frac{\sqrt{\mathsf{fma}\left(-3 \cdot a, c, b \cdot b\right)} - b}{a \cdot 3}}\]
    7. Using strategy rm
    8. Applied flip--32.2

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

      \[\leadsto \frac{\frac{\color{blue}{\mathsf{fma}\left(-3 \cdot a, c, 0\right)}}{\sqrt{\mathsf{fma}\left(-3 \cdot a, c, b \cdot b\right)} + b}}{a \cdot 3}\]
    10. Using strategy rm
    11. Applied add-cube-cbrt18.0

      \[\leadsto \frac{\frac{\mathsf{fma}\left(-3 \cdot a, c, 0\right)}{\color{blue}{\left(\sqrt[3]{\sqrt{\mathsf{fma}\left(-3 \cdot a, c, b \cdot b\right)} + b} \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(-3 \cdot a, c, b \cdot b\right)} + b}\right) \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(-3 \cdot a, c, b \cdot b\right)} + b}}}}{a \cdot 3}\]
    12. Applied associate-/r*18.0

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

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

    if 3.633198732680569e-37 < b

    1. Initial program 54.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -7.397994825724217 \cdot 10^{+150}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{a}{\frac{b}{c}}, \frac{3}{2}, b \cdot -2\right)}{a \cdot 3}\\ \mathbf{elif}\;b \le 3.80416111172822 \cdot 10^{-128}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} - b}{3}}{a}\\ \mathbf{elif}\;b \le 3.633198732680569 \cdot 10^{-37}:\\ \;\;\;\;\frac{\frac{\frac{c}{\sqrt[3]{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} + b}} \cdot \frac{a \cdot -3}{\sqrt[3]{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} + b}}}{\sqrt[3]{\sqrt{\mathsf{fma}\left(a \cdot -3, c, b \cdot b\right)} + b}}}{a \cdot 3}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\ \end{array}\]

Reproduce

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