Average Error: 33.2 → 14.2
Time: 38.7s
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 -6.675303265039827 \cdot 10^{+75}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{3}{2}, \left(\frac{a}{\frac{b}{c}}\right), \left(b \cdot -2\right)\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le 0.031080860458343948:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}\right), \left(\sqrt[3]{-b}\right), \left(\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)\right)}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a \cdot c}{b} \cdot \frac{-3}{2}}{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 -6.675303265039827 \cdot 10^{+75}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{3}{2}, \left(\frac{a}{\frac{b}{c}}\right), \left(b \cdot -2\right)\right)}{3 \cdot a}\\

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

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

\end{array}
double f(double a, double b, double c, double __attribute__((unused)) d) {
        double r18754897 = b;
        double r18754898 = -r18754897;
        double r18754899 = r18754897 * r18754897;
        double r18754900 = 3.0;
        double r18754901 = a;
        double r18754902 = r18754900 * r18754901;
        double r18754903 = c;
        double r18754904 = r18754902 * r18754903;
        double r18754905 = r18754899 - r18754904;
        double r18754906 = sqrt(r18754905);
        double r18754907 = r18754898 + r18754906;
        double r18754908 = r18754907 / r18754902;
        return r18754908;
}

double f(double a, double b, double c, double __attribute__((unused)) d) {
        double r18754909 = b;
        double r18754910 = -6.675303265039827e+75;
        bool r18754911 = r18754909 <= r18754910;
        double r18754912 = 1.5;
        double r18754913 = a;
        double r18754914 = c;
        double r18754915 = r18754909 / r18754914;
        double r18754916 = r18754913 / r18754915;
        double r18754917 = -2.0;
        double r18754918 = r18754909 * r18754917;
        double r18754919 = fma(r18754912, r18754916, r18754918);
        double r18754920 = 3.0;
        double r18754921 = r18754920 * r18754913;
        double r18754922 = r18754919 / r18754921;
        double r18754923 = 0.031080860458343948;
        bool r18754924 = r18754909 <= r18754923;
        double r18754925 = -r18754909;
        double r18754926 = cbrt(r18754925);
        double r18754927 = r18754926 * r18754926;
        double r18754928 = r18754909 * r18754909;
        double r18754929 = r18754921 * r18754914;
        double r18754930 = r18754928 - r18754929;
        double r18754931 = sqrt(r18754930);
        double r18754932 = fma(r18754927, r18754926, r18754931);
        double r18754933 = r18754932 / r18754921;
        double r18754934 = r18754913 * r18754914;
        double r18754935 = r18754934 / r18754909;
        double r18754936 = -1.5;
        double r18754937 = r18754935 * r18754936;
        double r18754938 = r18754937 / r18754921;
        double r18754939 = r18754924 ? r18754933 : r18754938;
        double r18754940 = r18754911 ? r18754922 : r18754939;
        return r18754940;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus d

Derivation

  1. Split input into 3 regimes
  2. if b < -6.675303265039827e+75

    1. Initial program 40.4

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

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

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

    if -6.675303265039827e+75 < b < 0.031080860458343948

    1. Initial program 15.8

      \[\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-cbrt16.0

      \[\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}\]
    4. Applied fma-def16.0

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

    if 0.031080860458343948 < b

    1. Initial program 55.2

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

      \[\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 -6.675303265039827 \cdot 10^{+75}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{3}{2}, \left(\frac{a}{\frac{b}{c}}\right), \left(b \cdot -2\right)\right)}{3 \cdot a}\\ \mathbf{elif}\;b \le 0.031080860458343948:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}\right), \left(\sqrt[3]{-b}\right), \left(\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)\right)}{3 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a \cdot c}{b} \cdot \frac{-3}{2}}{3 \cdot a}\\ \end{array}\]

Reproduce

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