Average Error: 34.3 → 12.4
Time: 14.8s
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.350676057343211554491874986591947593393 \cdot 10^{154}:\\ \;\;\;\;\frac{\left(-b\right) + \left(\frac{3}{2} \cdot \frac{a \cdot c}{b} - b\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le \frac{5607323487753163}{4.167509020549908921299907369200786123215 \cdot 10^{239}}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\\ \mathbf{elif}\;b \le 2.18011016373875351152746530015048116319 \cdot 10^{139}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{3 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{-3}{2} \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.350676057343211554491874986591947593393 \cdot 10^{154}:\\
\;\;\;\;\frac{\left(-b\right) + \left(\frac{3}{2} \cdot \frac{a \cdot c}{b} - b\right)}{3 \cdot a}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r97682 = b;
        double r97683 = -r97682;
        double r97684 = r97682 * r97682;
        double r97685 = 3.0;
        double r97686 = a;
        double r97687 = r97685 * r97686;
        double r97688 = c;
        double r97689 = r97687 * r97688;
        double r97690 = r97684 - r97689;
        double r97691 = sqrt(r97690);
        double r97692 = r97683 + r97691;
        double r97693 = r97692 / r97687;
        return r97693;
}

double f(double a, double b, double c) {
        double r97694 = b;
        double r97695 = -1.3506760573432116e+154;
        bool r97696 = r97694 <= r97695;
        double r97697 = -r97694;
        double r97698 = 3.0;
        double r97699 = 2.0;
        double r97700 = r97698 / r97699;
        double r97701 = a;
        double r97702 = c;
        double r97703 = r97701 * r97702;
        double r97704 = r97703 / r97694;
        double r97705 = r97700 * r97704;
        double r97706 = r97705 - r97694;
        double r97707 = r97697 + r97706;
        double r97708 = r97698 * r97701;
        double r97709 = r97707 / r97708;
        double r97710 = 5607323487753163.0;
        double r97711 = 4.167509020549909e+239;
        double r97712 = r97710 / r97711;
        bool r97713 = r97694 <= r97712;
        double r97714 = r97694 * r97694;
        double r97715 = r97708 * r97702;
        double r97716 = r97714 - r97715;
        double r97717 = sqrt(r97716);
        double r97718 = r97697 + r97717;
        double r97719 = r97718 / r97708;
        double r97720 = 2.1801101637387535e+139;
        bool r97721 = r97694 <= r97720;
        double r97722 = 1.0;
        double r97723 = r97698 * r97703;
        double r97724 = r97708 / r97723;
        double r97725 = r97697 - r97717;
        double r97726 = r97724 * r97725;
        double r97727 = r97722 / r97726;
        double r97728 = -3.0;
        double r97729 = r97728 / r97699;
        double r97730 = r97729 * r97704;
        double r97731 = r97730 / r97708;
        double r97732 = r97721 ? r97727 : r97731;
        double r97733 = r97713 ? r97719 : r97732;
        double r97734 = r97696 ? r97709 : r97733;
        return r97734;
}

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.3506760573432116e+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 12.0

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

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

    if -1.3506760573432116e+154 < b < 1.345485627050489e-224

    1. Initial program 9.4

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

    if 1.345485627050489e-224 < b < 2.1801101637387535e+139

    1. Initial program 36.9

      \[\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-+37.0

      \[\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.1

      \[\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 *-un-lft-identity16.1

      \[\leadsto \frac{\frac{0 + 3 \cdot \left(a \cdot c\right)}{\color{blue}{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}}}{3 \cdot a}\]
    7. Applied *-un-lft-identity16.1

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

      \[\leadsto \frac{\color{blue}{\frac{1}{1} \cdot \frac{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}\]
    9. Applied associate-/l*16.4

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

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

    if 2.1801101637387535e+139 < b

    1. Initial program 62.4

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

      \[\leadsto \frac{\color{blue}{-1.5 \cdot \frac{a \cdot c}{b}}}{3 \cdot a}\]
    3. Simplified15.3

      \[\leadsto \frac{\color{blue}{\frac{-3}{2} \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.350676057343211554491874986591947593393 \cdot 10^{154}:\\ \;\;\;\;\frac{\left(-b\right) + \left(\frac{3}{2} \cdot \frac{a \cdot c}{b} - b\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le \frac{5607323487753163}{4.167509020549908921299907369200786123215 \cdot 10^{239}}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\\ \mathbf{elif}\;b \le 2.18011016373875351152746530015048116319 \cdot 10^{139}:\\ \;\;\;\;\frac{1}{\frac{3 \cdot a}{3 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{-3}{2} \cdot \frac{a \cdot c}{b}}{3 \cdot a}\\ \end{array}\]

Reproduce

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