Average Error: 28.6 → 9.0
Time: 1.3m
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 2.703948251656073:\\ \;\;\;\;\frac{(\left(\sqrt{(b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*}\right) \cdot \left((b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*\right) + \left(b \cdot \left(-b \cdot b\right)\right))_*}{\left(\left(b \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} + b \cdot b\right) + \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) \cdot \left(3 \cdot a\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{c \cdot (\frac{-3}{2} \cdot b + \left(\left(\frac{c}{b} \cdot \frac{9}{8}\right) \cdot a\right))_*}{(b \cdot \left(\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) + \left((-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_* + b \cdot b\right))_*}\\ \end{array}\]
double f(double a, double b, double c, double __attribute__((unused)) d) {
        double r21026148 = b;
        double r21026149 = -r21026148;
        double r21026150 = r21026148 * r21026148;
        double r21026151 = 3.0;
        double r21026152 = a;
        double r21026153 = r21026151 * r21026152;
        double r21026154 = c;
        double r21026155 = r21026153 * r21026154;
        double r21026156 = r21026150 - r21026155;
        double r21026157 = sqrt(r21026156);
        double r21026158 = r21026149 + r21026157;
        double r21026159 = r21026158 / r21026153;
        return r21026159;
}

double f(double a, double b, double c, double __attribute__((unused)) d) {
        double r21026160 = b;
        double r21026161 = 2.703948251656073;
        bool r21026162 = r21026160 <= r21026161;
        double r21026163 = a;
        double r21026164 = -3.0;
        double r21026165 = c;
        double r21026166 = r21026164 * r21026165;
        double r21026167 = r21026163 * r21026166;
        double r21026168 = fma(r21026160, r21026160, r21026167);
        double r21026169 = sqrt(r21026168);
        double r21026170 = r21026160 * r21026160;
        double r21026171 = -r21026170;
        double r21026172 = r21026160 * r21026171;
        double r21026173 = fma(r21026169, r21026168, r21026172);
        double r21026174 = r21026163 * r21026165;
        double r21026175 = fma(r21026164, r21026174, r21026170);
        double r21026176 = sqrt(r21026175);
        double r21026177 = r21026160 * r21026176;
        double r21026178 = r21026177 + r21026170;
        double r21026179 = r21026176 * r21026176;
        double r21026180 = r21026178 + r21026179;
        double r21026181 = 3.0;
        double r21026182 = r21026181 * r21026163;
        double r21026183 = r21026180 * r21026182;
        double r21026184 = r21026173 / r21026183;
        double r21026185 = -1.5;
        double r21026186 = r21026165 / r21026160;
        double r21026187 = 1.125;
        double r21026188 = r21026186 * r21026187;
        double r21026189 = r21026188 * r21026163;
        double r21026190 = fma(r21026185, r21026160, r21026189);
        double r21026191 = r21026165 * r21026190;
        double r21026192 = r21026175 + r21026170;
        double r21026193 = fma(r21026160, r21026176, r21026192);
        double r21026194 = r21026191 / r21026193;
        double r21026195 = r21026162 ? r21026184 : r21026194;
        return r21026195;
}

\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 2.703948251656073:\\
\;\;\;\;\frac{(\left(\sqrt{(b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*}\right) \cdot \left((b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*\right) + \left(b \cdot \left(-b \cdot b\right)\right))_*}{\left(\left(b \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} + b \cdot b\right) + \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) \cdot \left(3 \cdot a\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{c \cdot (\frac{-3}{2} \cdot b + \left(\left(\frac{c}{b} \cdot \frac{9}{8}\right) \cdot a\right))_*}{(b \cdot \left(\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) + \left((-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_* + b \cdot b\right))_*}\\

\end{array}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus d

Derivation

  1. Split input into 2 regimes
  2. if b < 2.703948251656073

    1. Initial program 12.1

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

      \[\leadsto \color{blue}{\frac{\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} - b}{3 \cdot a}}\]
    3. Using strategy rm
    4. Applied flip3--12.2

      \[\leadsto \frac{\color{blue}{\frac{{\left(\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*}\right)}^{3} - {b}^{3}}{\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} + \left(b \cdot b + \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot b\right)}}}{3 \cdot a}\]
    5. Applied associate-/l/12.2

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

      \[\leadsto \frac{\color{blue}{\sqrt{(b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*} \cdot (b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_* - b \cdot \left(b \cdot b\right)}}{\left(3 \cdot a\right) \cdot \left(\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} + \left(b \cdot b + \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot b\right)\right)}\]
    7. Using strategy rm
    8. Applied fma-neg11.5

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

    if 2.703948251656073 < b

    1. Initial program 32.4

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

      \[\leadsto \color{blue}{\frac{\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} - b}{3 \cdot a}}\]
    3. Using strategy rm
    4. Applied flip3--32.5

      \[\leadsto \frac{\color{blue}{\frac{{\left(\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*}\right)}^{3} - {b}^{3}}{\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} + \left(b \cdot b + \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot b\right)}}}{3 \cdot a}\]
    5. Applied associate-/l/32.5

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

      \[\leadsto \frac{\color{blue}{\sqrt{(b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*} \cdot (b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_* - b \cdot \left(b \cdot b\right)}}{\left(3 \cdot a\right) \cdot \left(\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} + \left(b \cdot b + \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot b\right)\right)}\]
    7. Taylor expanded around inf 8.5

      \[\leadsto \frac{\color{blue}{\frac{27}{8} \cdot \frac{{a}^{2} \cdot {c}^{2}}{b} - \frac{9}{2} \cdot \left(a \cdot \left(b \cdot c\right)\right)}}{\left(3 \cdot a\right) \cdot \left(\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} + \left(b \cdot b + \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot b\right)\right)}\]
    8. Simplified8.5

      \[\leadsto \frac{\color{blue}{(\frac{-9}{2} \cdot \left(\left(a \cdot c\right) \cdot b\right) + \left(\frac{27}{8} \cdot \frac{\left(a \cdot c\right) \cdot \left(a \cdot c\right)}{b}\right))_*}}{\left(3 \cdot a\right) \cdot \left(\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} + \left(b \cdot b + \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot b\right)\right)}\]
    9. Using strategy rm
    10. Applied associate-/r*8.5

      \[\leadsto \color{blue}{\frac{\frac{(\frac{-9}{2} \cdot \left(\left(a \cdot c\right) \cdot b\right) + \left(\frac{27}{8} \cdot \frac{\left(a \cdot c\right) \cdot \left(a \cdot c\right)}{b}\right))_*}{3 \cdot a}}{\sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} + \left(b \cdot b + \sqrt{(-3 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} \cdot b\right)}}\]
    11. Simplified8.4

      \[\leadsto \frac{\frac{(\frac{-9}{2} \cdot \left(\left(a \cdot c\right) \cdot b\right) + \left(\frac{27}{8} \cdot \frac{\left(a \cdot c\right) \cdot \left(a \cdot c\right)}{b}\right))_*}{3 \cdot a}}{\color{blue}{(b \cdot \left(\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) + \left(b \cdot b + (-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*\right))_*}}\]
    12. Taylor expanded around -inf 8.4

      \[\leadsto \frac{\color{blue}{\frac{9}{8} \cdot \frac{a \cdot {c}^{2}}{b} - \frac{3}{2} \cdot \left(b \cdot c\right)}}{(b \cdot \left(\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) + \left(b \cdot b + (-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*\right))_*}\]
    13. Simplified8.3

      \[\leadsto \frac{\color{blue}{(\frac{-3}{2} \cdot b + \left(\left(\frac{9}{8} \cdot \frac{c}{b}\right) \cdot a\right))_* \cdot c}}{(b \cdot \left(\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) + \left(b \cdot b + (-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*\right))_*}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification9.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 2.703948251656073:\\ \;\;\;\;\frac{(\left(\sqrt{(b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*}\right) \cdot \left((b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*\right) + \left(b \cdot \left(-b \cdot b\right)\right))_*}{\left(\left(b \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} + b \cdot b\right) + \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) \cdot \left(3 \cdot a\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{c \cdot (\frac{-3}{2} \cdot b + \left(\left(\frac{c}{b} \cdot \frac{9}{8}\right) \cdot a\right))_*}{(b \cdot \left(\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) + \left((-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_* + b \cdot b\right))_*}\\ \end{array}\]

Reproduce

herbie shell --seed 2019101 +o rules:numerics
(FPCore (a b c d)
  :name "Cubic critical, narrow range"
  :pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))