Average Error: 34.8 → 12.4
Time: 6.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 -1.33791852996056488 \cdot 10^{154}:\\ \;\;\;\;\frac{\left(-b\right) + \left(1.5 \cdot \frac{a \cdot c}{b} - b\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le 1.38190037300826793 \cdot 10^{-133}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\\ \mathbf{elif}\;b \le 6.7711658147871089 \cdot 10^{125}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{3 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b + \left(0 - 3 \cdot \left(a \cdot c\right)\right)}\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1.5 \cdot \frac{a \cdot c}{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 -1.33791852996056488 \cdot 10^{154}:\\
\;\;\;\;\frac{\left(-b\right) + \left(1.5 \cdot \frac{a \cdot c}{b} - b\right)}{3 \cdot a}\\

\mathbf{elif}\;b \le 1.38190037300826793 \cdot 10^{-133}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\\

\mathbf{elif}\;b \le 6.7711658147871089 \cdot 10^{125}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{3 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b + \left(0 - 3 \cdot \left(a \cdot c\right)\right)}\right)}\\

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

\end{array}
double f(double a, double b, double c) {
        double r118993 = b;
        double r118994 = -r118993;
        double r118995 = r118993 * r118993;
        double r118996 = 3.0;
        double r118997 = a;
        double r118998 = r118996 * r118997;
        double r118999 = c;
        double r119000 = r118998 * r118999;
        double r119001 = r118995 - r119000;
        double r119002 = sqrt(r119001);
        double r119003 = r118994 + r119002;
        double r119004 = r119003 / r118998;
        return r119004;
}

double f(double a, double b, double c) {
        double r119005 = b;
        double r119006 = -1.3379185299605649e+154;
        bool r119007 = r119005 <= r119006;
        double r119008 = -r119005;
        double r119009 = 1.5;
        double r119010 = a;
        double r119011 = c;
        double r119012 = r119010 * r119011;
        double r119013 = r119012 / r119005;
        double r119014 = r119009 * r119013;
        double r119015 = r119014 - r119005;
        double r119016 = r119008 + r119015;
        double r119017 = 3.0;
        double r119018 = r119017 * r119010;
        double r119019 = r119016 / r119018;
        double r119020 = 1.381900373008268e-133;
        bool r119021 = r119005 <= r119020;
        double r119022 = r119005 * r119005;
        double r119023 = r119018 * r119011;
        double r119024 = r119022 - r119023;
        double r119025 = sqrt(r119024);
        double r119026 = r119008 + r119025;
        double r119027 = r119026 / r119018;
        double r119028 = 6.771165814787109e+125;
        bool r119029 = r119005 <= r119028;
        double r119030 = 1.0;
        double r119031 = r119017 * r119012;
        double r119032 = r119018 / r119031;
        double r119033 = 0.0;
        double r119034 = r119033 - r119031;
        double r119035 = r119022 + r119034;
        double r119036 = sqrt(r119035);
        double r119037 = r119008 - r119036;
        double r119038 = r119032 * r119037;
        double r119039 = r119030 / r119038;
        double r119040 = -1.5;
        double r119041 = r119040 * r119013;
        double r119042 = r119041 / r119018;
        double r119043 = r119029 ? r119039 : r119042;
        double r119044 = r119021 ? r119027 : r119043;
        double r119045 = r119007 ? r119019 : r119044;
        return r119045;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 4 regimes
  2. if b < -1.3379185299605649e+154

    1. Initial program 64.0

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

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

    if -1.3379185299605649e+154 < b < 1.381900373008268e-133

    1. Initial program 11.6

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

    if 1.381900373008268e-133 < b < 6.771165814787109e+125

    1. Initial program 41.5

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

      \[\leadsto \frac{\color{blue}{\frac{\left(-b\right) \cdot \left(-b\right) - \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) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}}{3 \cdot a}\]
    4. Simplified15.5

      \[\leadsto \frac{\frac{\color{blue}{0 + 3 \cdot \left(a \cdot c\right)}}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a}\]
    5. Using strategy rm
    6. Applied sub-neg15.5

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

      \[\leadsto \frac{\frac{0 + 3 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b + \color{blue}{\left(0 - 3 \cdot \left(a \cdot c\right)\right)}}}}{3 \cdot a}\]
    8. Using strategy rm
    9. Applied clear-num15.7

      \[\leadsto \color{blue}{\frac{1}{\frac{3 \cdot a}{\frac{0 + 3 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b + \left(0 - 3 \cdot \left(a \cdot c\right)\right)}}}}}\]
    10. Simplified13.8

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

    if 6.771165814787109e+125 < b

    1. Initial program 61.6

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

      \[\leadsto \frac{\color{blue}{-1.5 \cdot \frac{a \cdot c}{b}}}{3 \cdot a}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification12.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.33791852996056488 \cdot 10^{154}:\\ \;\;\;\;\frac{\left(-b\right) + \left(1.5 \cdot \frac{a \cdot c}{b} - b\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le 1.38190037300826793 \cdot 10^{-133}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\\ \mathbf{elif}\;b \le 6.7711658147871089 \cdot 10^{125}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{3 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b + \left(0 - 3 \cdot \left(a \cdot c\right)\right)}\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1.5 \cdot \frac{a \cdot c}{b}}{3 \cdot a}\\ \end{array}\]

Reproduce

herbie shell --seed 2020083 
(FPCore (a b c)
  :name "Cubic critical"
  :precision binary64
  (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))