Average Error: 33.0 → 14.2
Time: 19.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 -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 r2441646 = b;
        double r2441647 = -r2441646;
        double r2441648 = r2441646 * r2441646;
        double r2441649 = 3.0;
        double r2441650 = a;
        double r2441651 = r2441649 * r2441650;
        double r2441652 = c;
        double r2441653 = r2441651 * r2441652;
        double r2441654 = r2441648 - r2441653;
        double r2441655 = sqrt(r2441654);
        double r2441656 = r2441647 + r2441655;
        double r2441657 = r2441656 / r2441651;
        return r2441657;
}

double f(double a, double b, double c) {
        double r2441658 = b;
        double r2441659 = -3.539544285799822e+127;
        bool r2441660 = r2441658 <= r2441659;
        double r2441661 = 0.5;
        double r2441662 = c;
        double r2441663 = -3.0;
        double r2441664 = cbrt(r2441663);
        double r2441665 = r2441662 * r2441664;
        double r2441666 = 3.0;
        double r2441667 = cbrt(r2441666);
        double r2441668 = r2441667 * r2441667;
        double r2441669 = r2441665 * r2441668;
        double r2441670 = -1.0;
        double r2441671 = cbrt(r2441670);
        double r2441672 = r2441669 * r2441671;
        double r2441673 = a;
        double r2441674 = r2441673 / r2441658;
        double r2441675 = r2441672 * r2441674;
        double r2441676 = r2441661 * r2441675;
        double r2441677 = r2441676 - r2441658;
        double r2441678 = -r2441658;
        double r2441679 = r2441677 + r2441678;
        double r2441680 = r2441673 * r2441666;
        double r2441681 = r2441679 / r2441680;
        double r2441682 = 6.134174794339903e-27;
        bool r2441683 = r2441658 <= r2441682;
        double r2441684 = cbrt(r2441658);
        double r2441685 = r2441684 * r2441684;
        double r2441686 = -r2441685;
        double r2441687 = r2441658 * r2441658;
        double r2441688 = r2441662 * r2441680;
        double r2441689 = r2441687 - r2441688;
        double r2441690 = sqrt(r2441689);
        double r2441691 = fma(r2441686, r2441684, r2441690);
        double r2441692 = r2441691 / r2441680;
        double r2441693 = -1.5;
        double r2441694 = r2441662 * r2441673;
        double r2441695 = r2441694 / r2441658;
        double r2441696 = r2441693 * r2441695;
        double r2441697 = r2441696 / r2441680;
        double r2441698 = r2441683 ? r2441692 : r2441697;
        double r2441699 = r2441660 ? r2441681 : r2441698;
        return r2441699;
}

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-lft-neg-in14.7

      \[\leadsto \frac{\color{blue}{\left(-\sqrt[3]{b} \cdot \sqrt[3]{b}\right) \cdot \sqrt[3]{b}} + \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)))