Average Error: 34.0 → 8.7
Time: 21.4s
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 -7.644215926145536 \cdot 10^{+140}:\\ \;\;\;\;\frac{1}{\frac{3}{\mathsf{fma}\left(-2, b, \frac{\frac{3}{2} \cdot a}{\frac{b}{c}}\right)} \cdot a}\\ \mathbf{elif}\;b \le 6.867273651179479 \cdot 10^{-102}:\\ \;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} + \left(-b\right)\right) \cdot \frac{1}{a \cdot 3}\\ \mathbf{elif}\;b \le 1.6037393836292316 \cdot 10^{+23}:\\ \;\;\;\;\frac{1}{\frac{3}{\frac{\mathsf{fma}\left(c, a \cdot -3, 0\right)}{b + \sqrt{\mathsf{fma}\left(b, b, c \cdot \left(a \cdot -3\right)\right)}}} \cdot a}\\ \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 -7.644215926145536 \cdot 10^{+140}:\\
\;\;\;\;\frac{1}{\frac{3}{\mathsf{fma}\left(-2, b, \frac{\frac{3}{2} \cdot a}{\frac{b}{c}}\right)} \cdot a}\\

\mathbf{elif}\;b \le 6.867273651179479 \cdot 10^{-102}:\\
\;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} + \left(-b\right)\right) \cdot \frac{1}{a \cdot 3}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r4450139 = b;
        double r4450140 = -r4450139;
        double r4450141 = r4450139 * r4450139;
        double r4450142 = 3.0;
        double r4450143 = a;
        double r4450144 = r4450142 * r4450143;
        double r4450145 = c;
        double r4450146 = r4450144 * r4450145;
        double r4450147 = r4450141 - r4450146;
        double r4450148 = sqrt(r4450147);
        double r4450149 = r4450140 + r4450148;
        double r4450150 = r4450149 / r4450144;
        return r4450150;
}

double f(double a, double b, double c) {
        double r4450151 = b;
        double r4450152 = -7.644215926145536e+140;
        bool r4450153 = r4450151 <= r4450152;
        double r4450154 = 1.0;
        double r4450155 = 3.0;
        double r4450156 = -2.0;
        double r4450157 = 1.5;
        double r4450158 = a;
        double r4450159 = r4450157 * r4450158;
        double r4450160 = c;
        double r4450161 = r4450151 / r4450160;
        double r4450162 = r4450159 / r4450161;
        double r4450163 = fma(r4450156, r4450151, r4450162);
        double r4450164 = r4450155 / r4450163;
        double r4450165 = r4450164 * r4450158;
        double r4450166 = r4450154 / r4450165;
        double r4450167 = 6.867273651179479e-102;
        bool r4450168 = r4450151 <= r4450167;
        double r4450169 = r4450151 * r4450151;
        double r4450170 = r4450158 * r4450155;
        double r4450171 = r4450170 * r4450160;
        double r4450172 = r4450169 - r4450171;
        double r4450173 = sqrt(r4450172);
        double r4450174 = -r4450151;
        double r4450175 = r4450173 + r4450174;
        double r4450176 = r4450154 / r4450170;
        double r4450177 = r4450175 * r4450176;
        double r4450178 = 1.6037393836292316e+23;
        bool r4450179 = r4450151 <= r4450178;
        double r4450180 = -3.0;
        double r4450181 = r4450158 * r4450180;
        double r4450182 = 0.0;
        double r4450183 = fma(r4450160, r4450181, r4450182);
        double r4450184 = r4450160 * r4450181;
        double r4450185 = fma(r4450151, r4450151, r4450184);
        double r4450186 = sqrt(r4450185);
        double r4450187 = r4450151 + r4450186;
        double r4450188 = r4450183 / r4450187;
        double r4450189 = r4450155 / r4450188;
        double r4450190 = r4450189 * r4450158;
        double r4450191 = r4450154 / r4450190;
        double r4450192 = r4450160 / r4450151;
        double r4450193 = -0.5;
        double r4450194 = r4450192 * r4450193;
        double r4450195 = r4450179 ? r4450191 : r4450194;
        double r4450196 = r4450168 ? r4450177 : r4450195;
        double r4450197 = r4450153 ? r4450166 : r4450196;
        return r4450197;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 4 regimes
  2. if b < -7.644215926145536e+140

    1. Initial program 55.9

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied clear-num55.9

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

      \[\leadsto \frac{1}{\color{blue}{\frac{3}{\sqrt{\mathsf{fma}\left(b, b, c \cdot \left(-3 \cdot a\right)\right)} - b} \cdot a}}\]
    5. Taylor expanded around -inf 10.3

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

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

    if -7.644215926145536e+140 < b < 6.867273651179479e-102

    1. Initial program 11.6

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied div-inv11.6

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

    if 6.867273651179479e-102 < b < 1.6037393836292316e+23

    1. Initial program 39.0

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\]
    2. Using strategy rm
    3. Applied clear-num39.0

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

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

      \[\leadsto \frac{1}{\frac{3}{\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}}} \cdot a}\]
    7. Simplified17.3

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

    if 1.6037393836292316e+23 < b

    1. Initial program 55.6

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -7.644215926145536 \cdot 10^{+140}:\\ \;\;\;\;\frac{1}{\frac{3}{\mathsf{fma}\left(-2, b, \frac{\frac{3}{2} \cdot a}{\frac{b}{c}}\right)} \cdot a}\\ \mathbf{elif}\;b \le 6.867273651179479 \cdot 10^{-102}:\\ \;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot 3\right) \cdot c} + \left(-b\right)\right) \cdot \frac{1}{a \cdot 3}\\ \mathbf{elif}\;b \le 1.6037393836292316 \cdot 10^{+23}:\\ \;\;\;\;\frac{1}{\frac{3}{\frac{\mathsf{fma}\left(c, a \cdot -3, 0\right)}{b + \sqrt{\mathsf{fma}\left(b, b, c \cdot \left(a \cdot -3\right)\right)}}} \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\ \end{array}\]

Reproduce

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