Average Error: 34.3 → 9.3
Time: 5.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 -2.14194017547317126 \cdot 10^{130}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 7.481934651249181 \cdot 10^{-117}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}\\ \mathbf{elif}\;b \le 7.24024992671430264 \cdot 10^{121}:\\ \;\;\;\;\frac{\frac{3 \cdot \left(a \cdot c\right)}{3 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}}{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.14194017547317126 \cdot 10^{130}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r125699 = b;
        double r125700 = -r125699;
        double r125701 = r125699 * r125699;
        double r125702 = 3.0;
        double r125703 = a;
        double r125704 = r125702 * r125703;
        double r125705 = c;
        double r125706 = r125704 * r125705;
        double r125707 = r125701 - r125706;
        double r125708 = sqrt(r125707);
        double r125709 = r125700 + r125708;
        double r125710 = r125709 / r125704;
        return r125710;
}

double f(double a, double b, double c) {
        double r125711 = b;
        double r125712 = -2.1419401754731713e+130;
        bool r125713 = r125711 <= r125712;
        double r125714 = 0.5;
        double r125715 = c;
        double r125716 = r125715 / r125711;
        double r125717 = r125714 * r125716;
        double r125718 = 0.6666666666666666;
        double r125719 = a;
        double r125720 = r125711 / r125719;
        double r125721 = r125718 * r125720;
        double r125722 = r125717 - r125721;
        double r125723 = 7.481934651249181e-117;
        bool r125724 = r125711 <= r125723;
        double r125725 = 1.0;
        double r125726 = 3.0;
        double r125727 = r125726 * r125719;
        double r125728 = -r125711;
        double r125729 = r125711 * r125711;
        double r125730 = r125727 * r125715;
        double r125731 = r125729 - r125730;
        double r125732 = sqrt(r125731);
        double r125733 = r125728 + r125732;
        double r125734 = r125727 / r125733;
        double r125735 = r125725 / r125734;
        double r125736 = 7.240249926714303e+121;
        bool r125737 = r125711 <= r125736;
        double r125738 = r125719 * r125715;
        double r125739 = r125726 * r125738;
        double r125740 = r125728 - r125732;
        double r125741 = r125726 * r125740;
        double r125742 = r125739 / r125741;
        double r125743 = r125742 / r125719;
        double r125744 = -0.5;
        double r125745 = r125744 * r125716;
        double r125746 = r125737 ? r125743 : r125745;
        double r125747 = r125724 ? r125735 : r125746;
        double r125748 = r125713 ? r125722 : r125747;
        return r125748;
}

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 < -2.1419401754731713e+130

    1. Initial program 57.3

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

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

    if -2.1419401754731713e+130 < b < 7.481934651249181e-117

    1. Initial program 11.0

      \[\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-num11.0

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

    if 7.481934651249181e-117 < b < 7.240249926714303e+121

    1. Initial program 42.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 flip-+42.1

      \[\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. Simplified16.6

      \[\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 associate-/r*16.6

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

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

    if 7.240249926714303e+121 < b

    1. Initial program 61.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.14194017547317126 \cdot 10^{130}:\\ \;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\ \mathbf{elif}\;b \le 7.481934651249181 \cdot 10^{-117}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}\\ \mathbf{elif}\;b \le 7.24024992671430264 \cdot 10^{121}:\\ \;\;\;\;\frac{\frac{3 \cdot \left(a \cdot c\right)}{3 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}}{a}\\ \mathbf{else}:\\ \;\;\;\;-0.5 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

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