Average Error: 33.6 → 8.8
Time: 22.2s
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.874603183983119 \cdot 10^{+152}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b}, \frac{-2}{3} \cdot \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 1.5239734618075918 \cdot 10^{-130}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -3\right) \cdot c\right)} - b}{3}}{a}\\ \mathbf{elif}\;b \le 12112.835762088263:\\ \;\;\;\;\frac{\frac{c \cdot -3}{\sqrt{b + \sqrt{\mathsf{fma}\left(c \cdot -3, a, b \cdot b\right)}}} \cdot \frac{a}{\sqrt{b + \sqrt{\mathsf{fma}\left(c \cdot -3, a, b \cdot b\right)}}}}{\sqrt{3} \cdot a} \cdot \frac{1}{\sqrt{3}}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\ \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.874603183983119 \cdot 10^{+152}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b}, \frac{-2}{3} \cdot \frac{b}{a}\right)\\

\mathbf{elif}\;b \le 1.5239734618075918 \cdot 10^{-130}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -3\right) \cdot c\right)} - b}{3}}{a}\\

\mathbf{elif}\;b \le 12112.835762088263:\\
\;\;\;\;\frac{\frac{c \cdot -3}{\sqrt{b + \sqrt{\mathsf{fma}\left(c \cdot -3, a, b \cdot b\right)}}} \cdot \frac{a}{\sqrt{b + \sqrt{\mathsf{fma}\left(c \cdot -3, a, b \cdot b\right)}}}}{\sqrt{3} \cdot a} \cdot \frac{1}{\sqrt{3}}\\

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

\end{array}
double f(double a, double b, double c) {
        double r3425727 = b;
        double r3425728 = -r3425727;
        double r3425729 = r3425727 * r3425727;
        double r3425730 = 3.0;
        double r3425731 = a;
        double r3425732 = r3425730 * r3425731;
        double r3425733 = c;
        double r3425734 = r3425732 * r3425733;
        double r3425735 = r3425729 - r3425734;
        double r3425736 = sqrt(r3425735);
        double r3425737 = r3425728 + r3425736;
        double r3425738 = r3425737 / r3425732;
        return r3425738;
}

double f(double a, double b, double c) {
        double r3425739 = b;
        double r3425740 = -2.874603183983119e+152;
        bool r3425741 = r3425739 <= r3425740;
        double r3425742 = 0.5;
        double r3425743 = c;
        double r3425744 = r3425743 / r3425739;
        double r3425745 = -0.6666666666666666;
        double r3425746 = a;
        double r3425747 = r3425739 / r3425746;
        double r3425748 = r3425745 * r3425747;
        double r3425749 = fma(r3425742, r3425744, r3425748);
        double r3425750 = 1.5239734618075918e-130;
        bool r3425751 = r3425739 <= r3425750;
        double r3425752 = -3.0;
        double r3425753 = r3425746 * r3425752;
        double r3425754 = r3425753 * r3425743;
        double r3425755 = fma(r3425739, r3425739, r3425754);
        double r3425756 = sqrt(r3425755);
        double r3425757 = r3425756 - r3425739;
        double r3425758 = 3.0;
        double r3425759 = r3425757 / r3425758;
        double r3425760 = r3425759 / r3425746;
        double r3425761 = 12112.835762088263;
        bool r3425762 = r3425739 <= r3425761;
        double r3425763 = r3425743 * r3425752;
        double r3425764 = r3425739 * r3425739;
        double r3425765 = fma(r3425763, r3425746, r3425764);
        double r3425766 = sqrt(r3425765);
        double r3425767 = r3425739 + r3425766;
        double r3425768 = sqrt(r3425767);
        double r3425769 = r3425763 / r3425768;
        double r3425770 = r3425746 / r3425768;
        double r3425771 = r3425769 * r3425770;
        double r3425772 = sqrt(r3425758);
        double r3425773 = r3425772 * r3425746;
        double r3425774 = r3425771 / r3425773;
        double r3425775 = 1.0;
        double r3425776 = r3425775 / r3425772;
        double r3425777 = r3425774 * r3425776;
        double r3425778 = -0.5;
        double r3425779 = r3425744 * r3425778;
        double r3425780 = r3425762 ? r3425777 : r3425779;
        double r3425781 = r3425751 ? r3425760 : r3425780;
        double r3425782 = r3425741 ? r3425749 : r3425781;
        return r3425782;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 4 regimes
  2. if b < -2.874603183983119e+152

    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.2

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \frac{c}{b} - \frac{2}{3} \cdot \frac{b}{a}}\]
    3. Simplified2.2

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

    if -2.874603183983119e+152 < b < 1.5239734618075918e-130

    1. Initial program 11.7

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied associate-/r*11.7

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

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

    if 1.5239734618075918e-130 < b < 12112.835762088263

    1. Initial program 33.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied associate-/r*33.4

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

      \[\leadsto \frac{\color{blue}{\frac{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-3 \cdot a\right)\right)} - b}{3}}}{a}\]
    5. Using strategy rm
    6. Applied flip--33.5

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

      \[\leadsto \frac{\frac{\frac{\color{blue}{\mathsf{fma}\left(a \cdot c, -3, 0\right)}}{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-3 \cdot a\right)\right)} + b}}{3}}{a}\]
    8. Using strategy rm
    9. Applied *-un-lft-identity16.4

      \[\leadsto \frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -3, 0\right)}{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-3 \cdot a\right)\right)} + b}}{3}}{\color{blue}{1 \cdot a}}\]
    10. Applied add-sqr-sqrt16.7

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

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

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

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

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

      \[\leadsto \color{blue}{\frac{\frac{\frac{1}{1}}{\sqrt{3}}}{1} \cdot \frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -3, 0\right)}{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-3 \cdot a\right)\right)} + b}}{\sqrt{3}}}{a}}\]
    16. Simplified16.8

      \[\leadsto \color{blue}{\frac{1}{\sqrt{3}}} \cdot \frac{\frac{\frac{\mathsf{fma}\left(a \cdot c, -3, 0\right)}{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-3 \cdot a\right)\right)} + b}}{\sqrt{3}}}{a}\]
    17. Simplified16.6

      \[\leadsto \frac{1}{\sqrt{3}} \cdot \color{blue}{\frac{\frac{a \cdot \left(-3 \cdot c\right)}{b + \sqrt{\mathsf{fma}\left(-3 \cdot c, a, b \cdot b\right)}}}{a \cdot \sqrt{3}}}\]
    18. Using strategy rm
    19. Applied add-sqr-sqrt16.6

      \[\leadsto \frac{1}{\sqrt{3}} \cdot \frac{\frac{a \cdot \left(-3 \cdot c\right)}{\color{blue}{\sqrt{b + \sqrt{\mathsf{fma}\left(-3 \cdot c, a, b \cdot b\right)}} \cdot \sqrt{b + \sqrt{\mathsf{fma}\left(-3 \cdot c, a, b \cdot b\right)}}}}}{a \cdot \sqrt{3}}\]
    20. Applied times-frac13.6

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

    if 12112.835762088263 < b

    1. Initial program 54.9

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.874603183983119 \cdot 10^{+152}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{2}, \frac{c}{b}, \frac{-2}{3} \cdot \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 1.5239734618075918 \cdot 10^{-130}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot -3\right) \cdot c\right)} - b}{3}}{a}\\ \mathbf{elif}\;b \le 12112.835762088263:\\ \;\;\;\;\frac{\frac{c \cdot -3}{\sqrt{b + \sqrt{\mathsf{fma}\left(c \cdot -3, a, b \cdot b\right)}}} \cdot \frac{a}{\sqrt{b + \sqrt{\mathsf{fma}\left(c \cdot -3, a, b \cdot b\right)}}}}{\sqrt{3} \cdot a} \cdot \frac{1}{\sqrt{3}}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\ \end{array}\]

Reproduce

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