Average Error: 33.6 → 8.8
Time: 23.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 -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 r3889649 = b;
        double r3889650 = -r3889649;
        double r3889651 = r3889649 * r3889649;
        double r3889652 = 3.0;
        double r3889653 = a;
        double r3889654 = r3889652 * r3889653;
        double r3889655 = c;
        double r3889656 = r3889654 * r3889655;
        double r3889657 = r3889651 - r3889656;
        double r3889658 = sqrt(r3889657);
        double r3889659 = r3889650 + r3889658;
        double r3889660 = r3889659 / r3889654;
        return r3889660;
}

double f(double a, double b, double c) {
        double r3889661 = b;
        double r3889662 = -2.874603183983119e+152;
        bool r3889663 = r3889661 <= r3889662;
        double r3889664 = 0.5;
        double r3889665 = c;
        double r3889666 = r3889665 / r3889661;
        double r3889667 = -0.6666666666666666;
        double r3889668 = a;
        double r3889669 = r3889661 / r3889668;
        double r3889670 = r3889667 * r3889669;
        double r3889671 = fma(r3889664, r3889666, r3889670);
        double r3889672 = 1.5239734618075918e-130;
        bool r3889673 = r3889661 <= r3889672;
        double r3889674 = -3.0;
        double r3889675 = r3889668 * r3889674;
        double r3889676 = r3889675 * r3889665;
        double r3889677 = fma(r3889661, r3889661, r3889676);
        double r3889678 = sqrt(r3889677);
        double r3889679 = r3889678 - r3889661;
        double r3889680 = 3.0;
        double r3889681 = r3889679 / r3889680;
        double r3889682 = r3889681 / r3889668;
        double r3889683 = 12112.835762088263;
        bool r3889684 = r3889661 <= r3889683;
        double r3889685 = r3889665 * r3889674;
        double r3889686 = r3889661 * r3889661;
        double r3889687 = fma(r3889685, r3889668, r3889686);
        double r3889688 = sqrt(r3889687);
        double r3889689 = r3889661 + r3889688;
        double r3889690 = sqrt(r3889689);
        double r3889691 = r3889685 / r3889690;
        double r3889692 = r3889668 / r3889690;
        double r3889693 = r3889691 * r3889692;
        double r3889694 = sqrt(r3889680);
        double r3889695 = r3889694 * r3889668;
        double r3889696 = r3889693 / r3889695;
        double r3889697 = 1.0;
        double r3889698 = r3889697 / r3889694;
        double r3889699 = r3889696 * r3889698;
        double r3889700 = -0.5;
        double r3889701 = r3889666 * r3889700;
        double r3889702 = r3889684 ? r3889699 : r3889701;
        double r3889703 = r3889673 ? r3889682 : r3889702;
        double r3889704 = r3889663 ? r3889671 : r3889703;
        return r3889704;
}

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)))