Average Error: 34.2 → 10.2
Time: 5.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 -2.675733832275465886979422961103066713356 \cdot 10^{144}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 8.955698051059873403585681401912267705382 \cdot 10^{-30}:\\ \;\;\;\;\frac{1}{3} \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{a}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \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 -2.675733832275465886979422961103066713356 \cdot 10^{144}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r110008 = b;
        double r110009 = -r110008;
        double r110010 = r110008 * r110008;
        double r110011 = 3.0;
        double r110012 = a;
        double r110013 = r110011 * r110012;
        double r110014 = c;
        double r110015 = r110013 * r110014;
        double r110016 = r110010 - r110015;
        double r110017 = sqrt(r110016);
        double r110018 = r110009 + r110017;
        double r110019 = r110018 / r110013;
        return r110019;
}

double f(double a, double b, double c) {
        double r110020 = b;
        double r110021 = -2.675733832275466e+144;
        bool r110022 = r110020 <= r110021;
        double r110023 = 0.5;
        double r110024 = c;
        double r110025 = r110024 / r110020;
        double r110026 = r110023 * r110025;
        double r110027 = 0.6666666666666666;
        double r110028 = a;
        double r110029 = r110020 / r110028;
        double r110030 = r110027 * r110029;
        double r110031 = r110026 - r110030;
        double r110032 = 8.955698051059873e-30;
        bool r110033 = r110020 <= r110032;
        double r110034 = 1.0;
        double r110035 = 3.0;
        double r110036 = r110034 / r110035;
        double r110037 = -r110020;
        double r110038 = r110020 * r110020;
        double r110039 = r110035 * r110028;
        double r110040 = r110039 * r110024;
        double r110041 = r110038 - r110040;
        double r110042 = sqrt(r110041);
        double r110043 = r110037 + r110042;
        double r110044 = r110043 / r110028;
        double r110045 = r110036 * r110044;
        double r110046 = -0.5;
        double r110047 = r110046 * r110025;
        double r110048 = r110033 ? r110045 : r110047;
        double r110049 = r110022 ? r110031 : r110048;
        return r110049;
}

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 3 regimes
  2. if b < -2.675733832275466e+144

    1. Initial program 60.4

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

      \[\leadsto \color{blue}{0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}}\]

    if -2.675733832275466e+144 < b < 8.955698051059873e-30

    1. Initial program 14.2

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

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

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

    if 8.955698051059873e-30 < b

    1. Initial program 54.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.675733832275465886979422961103066713356 \cdot 10^{144}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 8.955698051059873403585681401912267705382 \cdot 10^{-30}:\\ \;\;\;\;\frac{1}{3} \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{a}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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