Average Error: 33.0 → 14.2
Time: 16.1s
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 -3.539544285799822 \cdot 10^{+127}:\\ \;\;\;\;\frac{\left(\frac{1}{2} \cdot \left(\left(\left(\left(c \cdot \sqrt[3]{-3}\right) \cdot \left(\sqrt[3]{3} \cdot \sqrt[3]{3}\right)\right) \cdot \sqrt[3]{-1}\right) \cdot \frac{a}{b}\right) - b\right) + \left(-b\right)}{a \cdot 3}\\ \mathbf{elif}\;b \le 6.134174794339903 \cdot 10^{-27}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\sqrt[3]{b} \cdot \sqrt[3]{b}, -\sqrt[3]{b}, \sqrt{b \cdot b - c \cdot \left(a \cdot 3\right)}\right)}{a \cdot 3}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{-3}{2} \cdot \frac{c \cdot a}{b}}{a \cdot 3}\\ \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 -3.539544285799822 \cdot 10^{+127}:\\
\;\;\;\;\frac{\left(\frac{1}{2} \cdot \left(\left(\left(\left(c \cdot \sqrt[3]{-3}\right) \cdot \left(\sqrt[3]{3} \cdot \sqrt[3]{3}\right)\right) \cdot \sqrt[3]{-1}\right) \cdot \frac{a}{b}\right) - b\right) + \left(-b\right)}{a \cdot 3}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r1636774 = b;
        double r1636775 = -r1636774;
        double r1636776 = r1636774 * r1636774;
        double r1636777 = 3.0;
        double r1636778 = a;
        double r1636779 = r1636777 * r1636778;
        double r1636780 = c;
        double r1636781 = r1636779 * r1636780;
        double r1636782 = r1636776 - r1636781;
        double r1636783 = sqrt(r1636782);
        double r1636784 = r1636775 + r1636783;
        double r1636785 = r1636784 / r1636779;
        return r1636785;
}

double f(double a, double b, double c) {
        double r1636786 = b;
        double r1636787 = -3.539544285799822e+127;
        bool r1636788 = r1636786 <= r1636787;
        double r1636789 = 0.5;
        double r1636790 = c;
        double r1636791 = -3.0;
        double r1636792 = cbrt(r1636791);
        double r1636793 = r1636790 * r1636792;
        double r1636794 = 3.0;
        double r1636795 = cbrt(r1636794);
        double r1636796 = r1636795 * r1636795;
        double r1636797 = r1636793 * r1636796;
        double r1636798 = -1.0;
        double r1636799 = cbrt(r1636798);
        double r1636800 = r1636797 * r1636799;
        double r1636801 = a;
        double r1636802 = r1636801 / r1636786;
        double r1636803 = r1636800 * r1636802;
        double r1636804 = r1636789 * r1636803;
        double r1636805 = r1636804 - r1636786;
        double r1636806 = -r1636786;
        double r1636807 = r1636805 + r1636806;
        double r1636808 = r1636801 * r1636794;
        double r1636809 = r1636807 / r1636808;
        double r1636810 = 6.134174794339903e-27;
        bool r1636811 = r1636786 <= r1636810;
        double r1636812 = cbrt(r1636786);
        double r1636813 = r1636812 * r1636812;
        double r1636814 = -r1636812;
        double r1636815 = r1636786 * r1636786;
        double r1636816 = r1636790 * r1636808;
        double r1636817 = r1636815 - r1636816;
        double r1636818 = sqrt(r1636817);
        double r1636819 = fma(r1636813, r1636814, r1636818);
        double r1636820 = r1636819 / r1636808;
        double r1636821 = -1.5;
        double r1636822 = r1636790 * r1636801;
        double r1636823 = r1636822 / r1636786;
        double r1636824 = r1636821 * r1636823;
        double r1636825 = r1636824 / r1636808;
        double r1636826 = r1636811 ? r1636820 : r1636825;
        double r1636827 = r1636788 ? r1636809 : r1636826;
        return r1636827;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 3 regimes
  2. if b < -3.539544285799822e+127

    1. Initial program 51.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 add-cube-cbrt51.7

      \[\leadsto \frac{\left(-b\right) + \sqrt{b \cdot b - \color{blue}{\left(\sqrt[3]{\left(3 \cdot a\right) \cdot c} \cdot \sqrt[3]{\left(3 \cdot a\right) \cdot c}\right) \cdot \sqrt[3]{\left(3 \cdot a\right) \cdot c}}}}{3 \cdot a}\]
    4. Using strategy rm
    5. Applied cbrt-prod51.7

      \[\leadsto \frac{\left(-b\right) + \sqrt{b \cdot b - \left(\sqrt[3]{\left(3 \cdot a\right) \cdot c} \cdot \sqrt[3]{\left(3 \cdot a\right) \cdot c}\right) \cdot \color{blue}{\left(\sqrt[3]{3 \cdot a} \cdot \sqrt[3]{c}\right)}}}{3 \cdot a}\]
    6. Taylor expanded around -inf 8.8

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

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

    if -3.539544285799822e+127 < b < 6.134174794339903e-27

    1. Initial program 14.5

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt14.7

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

      \[\leadsto \frac{\color{blue}{\left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right) \cdot \left(-\sqrt[3]{b}\right)} + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    5. Applied fma-def14.7

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

    if 6.134174794339903e-27 < b

    1. Initial program 53.7

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

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

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

Reproduce

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