\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 2892.1913455639924:\\
\;\;\;\;\frac{\frac{\left(\left(a \cdot c\right) \cdot -3\right) \cdot \sqrt{\mathsf{fma}\left(a \cdot c, -3, b \cdot b\right)} + \frac{\mathsf{fma}\left(\left(\left(b \cdot b\right) \cdot \left(b \cdot b\right)\right) \cdot \left(b \cdot b\right), \mathsf{fma}\left(a \cdot c, -3, b \cdot b\right) \cdot \sqrt{\mathsf{fma}\left(a \cdot c, -3, b \cdot b\right)}, \left(\left(\left(b \cdot b\right) \cdot \left(b \cdot b\right)\right) \cdot \left(b \cdot b\right)\right) \cdot \left(-b \cdot \left(b \cdot b\right)\right)\right)}{\mathsf{fma}\left(\left(b \cdot b\right) \cdot \left(b \cdot b\right), \mathsf{fma}\left(a \cdot c, -3, b \cdot b\right), \left(b \cdot \left(b \cdot b\right)\right) \cdot \mathsf{fma}\left(\sqrt{\mathsf{fma}\left(a \cdot c, -3, b \cdot b\right)}, b \cdot b, b \cdot \left(b \cdot b\right)\right)\right)}}{\mathsf{fma}\left(\sqrt{\mathsf{fma}\left(a \cdot c, -3, b \cdot b\right)}, b, b \cdot b + \mathsf{fma}\left(a \cdot c, -3, b \cdot b\right)\right)}}{a \cdot 3}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{a \cdot 3}{\frac{\mathsf{fma}\left(\left(a \cdot c\right) \cdot b, \frac{-3}{2}, \left(a \cdot \sqrt{\mathsf{fma}\left(a, -3 \cdot c, b \cdot b\right)}\right) \cdot \left(-3 \cdot c\right)\right)}{\mathsf{fma}\left(\sqrt{\mathsf{fma}\left(a, -3 \cdot c, b \cdot b\right)}, b, b \cdot b + \mathsf{fma}\left(a, -3 \cdot c, b \cdot b\right)\right)}}}\\
\end{array}double f(double a, double b, double c) {
double r1925577 = b;
double r1925578 = -r1925577;
double r1925579 = r1925577 * r1925577;
double r1925580 = 3.0;
double r1925581 = a;
double r1925582 = r1925580 * r1925581;
double r1925583 = c;
double r1925584 = r1925582 * r1925583;
double r1925585 = r1925579 - r1925584;
double r1925586 = sqrt(r1925585);
double r1925587 = r1925578 + r1925586;
double r1925588 = r1925587 / r1925582;
return r1925588;
}
double f(double a, double b, double c) {
double r1925589 = b;
double r1925590 = 2892.1913455639924;
bool r1925591 = r1925589 <= r1925590;
double r1925592 = a;
double r1925593 = c;
double r1925594 = r1925592 * r1925593;
double r1925595 = -3.0;
double r1925596 = r1925594 * r1925595;
double r1925597 = r1925589 * r1925589;
double r1925598 = fma(r1925594, r1925595, r1925597);
double r1925599 = sqrt(r1925598);
double r1925600 = r1925596 * r1925599;
double r1925601 = r1925597 * r1925597;
double r1925602 = r1925601 * r1925597;
double r1925603 = r1925598 * r1925599;
double r1925604 = r1925589 * r1925597;
double r1925605 = -r1925604;
double r1925606 = r1925602 * r1925605;
double r1925607 = fma(r1925602, r1925603, r1925606);
double r1925608 = fma(r1925599, r1925597, r1925604);
double r1925609 = r1925604 * r1925608;
double r1925610 = fma(r1925601, r1925598, r1925609);
double r1925611 = r1925607 / r1925610;
double r1925612 = r1925600 + r1925611;
double r1925613 = r1925597 + r1925598;
double r1925614 = fma(r1925599, r1925589, r1925613);
double r1925615 = r1925612 / r1925614;
double r1925616 = 3.0;
double r1925617 = r1925592 * r1925616;
double r1925618 = r1925615 / r1925617;
double r1925619 = 1.0;
double r1925620 = r1925594 * r1925589;
double r1925621 = -1.5;
double r1925622 = r1925595 * r1925593;
double r1925623 = fma(r1925592, r1925622, r1925597);
double r1925624 = sqrt(r1925623);
double r1925625 = r1925592 * r1925624;
double r1925626 = r1925625 * r1925622;
double r1925627 = fma(r1925620, r1925621, r1925626);
double r1925628 = r1925597 + r1925623;
double r1925629 = fma(r1925624, r1925589, r1925628);
double r1925630 = r1925627 / r1925629;
double r1925631 = r1925617 / r1925630;
double r1925632 = r1925619 / r1925631;
double r1925633 = r1925591 ? r1925618 : r1925632;
return r1925633;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < 2892.1913455639924Initial program 18.6
Simplified18.6
rmApplied flip3--18.7
Simplified18.0
Simplified18.0
rmApplied fma-udef18.0
Applied distribute-rgt-in17.8
Applied associate--l+17.5
rmApplied flip3--17.5
Simplified16.6
Simplified16.6
if 2892.1913455639924 < b Initial program 37.1
Simplified37.1
rmApplied flip3--37.2
Simplified36.5
Simplified36.5
rmApplied fma-udef36.5
Applied distribute-rgt-in36.4
Applied associate--l+33.6
Taylor expanded around inf 14.6
rmApplied clear-num14.6
Simplified14.6
Final simplification15.5
herbie shell --seed 2019152 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, narrow range"
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))