Average Error: 34.3 → 10.7
Time: 6.9s
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 -8.55528137777049654 \cdot 10^{140}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 11181767625882.1309:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\ \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 -8.55528137777049654 \cdot 10^{140}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\

\mathbf{elif}\;b \le 11181767625882.1309:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\

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

\end{array}
double f(double a, double b, double c) {
        double r161866 = b;
        double r161867 = -r161866;
        double r161868 = r161866 * r161866;
        double r161869 = 3.0;
        double r161870 = a;
        double r161871 = r161869 * r161870;
        double r161872 = c;
        double r161873 = r161871 * r161872;
        double r161874 = r161868 - r161873;
        double r161875 = sqrt(r161874);
        double r161876 = r161867 + r161875;
        double r161877 = r161876 / r161871;
        return r161877;
}

double f(double a, double b, double c) {
        double r161878 = b;
        double r161879 = -8.555281377770497e+140;
        bool r161880 = r161878 <= r161879;
        double r161881 = 0.5;
        double r161882 = c;
        double r161883 = r161882 / r161878;
        double r161884 = r161881 * r161883;
        double r161885 = 0.6666666666666666;
        double r161886 = a;
        double r161887 = r161878 / r161886;
        double r161888 = r161885 * r161887;
        double r161889 = r161884 - r161888;
        double r161890 = 11181767625882.13;
        bool r161891 = r161878 <= r161890;
        double r161892 = 1.0;
        double r161893 = 3.0;
        double r161894 = r161893 * r161886;
        double r161895 = r161878 * r161878;
        double r161896 = r161894 * r161882;
        double r161897 = r161895 - r161896;
        double r161898 = sqrt(r161897);
        double r161899 = r161898 - r161878;
        double r161900 = r161894 / r161899;
        double r161901 = r161892 / r161900;
        double r161902 = -0.5;
        double r161903 = r161902 * r161883;
        double r161904 = r161891 ? r161901 : r161903;
        double r161905 = r161880 ? r161889 : r161904;
        return r161905;
}

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 < -8.555281377770497e+140

    1. Initial program 58.5

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

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

    if -8.555281377770497e+140 < b < 11181767625882.13

    1. Initial program 15.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 clear-num15.9

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

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

    if 11181767625882.13 < b

    1. Initial program 56.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -8.55528137777049654 \cdot 10^{140}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 11181767625882.1309:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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