\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -3438870219673743856300090597329338368:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -9.940959811381675939988945669030883027544 \cdot 10^{-96}:\\
\;\;\;\;\frac{\frac{\left(a \cdot c\right) \cdot 4}{\mathsf{fma}\left(\left|\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right|, \sqrt{\sqrt[3]{b \cdot b - 4 \cdot \left(a \cdot c\right)}}, -b\right) + \left(\left(-b\right) + b\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le -6.373481960958038092461518588786337642855 \cdot 10^{-132}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.972594060757836305384453450333248094101 \cdot 10^{74}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r67910 = b;
double r67911 = -r67910;
double r67912 = r67910 * r67910;
double r67913 = 4.0;
double r67914 = a;
double r67915 = c;
double r67916 = r67914 * r67915;
double r67917 = r67913 * r67916;
double r67918 = r67912 - r67917;
double r67919 = sqrt(r67918);
double r67920 = r67911 - r67919;
double r67921 = 2.0;
double r67922 = r67921 * r67914;
double r67923 = r67920 / r67922;
return r67923;
}
double f(double a, double b, double c) {
double r67924 = b;
double r67925 = -3.438870219673744e+36;
bool r67926 = r67924 <= r67925;
double r67927 = -1.0;
double r67928 = c;
double r67929 = r67928 / r67924;
double r67930 = r67927 * r67929;
double r67931 = -9.940959811381676e-96;
bool r67932 = r67924 <= r67931;
double r67933 = a;
double r67934 = r67933 * r67928;
double r67935 = 4.0;
double r67936 = r67934 * r67935;
double r67937 = r67924 * r67924;
double r67938 = r67935 * r67934;
double r67939 = r67937 - r67938;
double r67940 = cbrt(r67939);
double r67941 = fabs(r67940);
double r67942 = sqrt(r67940);
double r67943 = -r67924;
double r67944 = fma(r67941, r67942, r67943);
double r67945 = r67943 + r67924;
double r67946 = r67944 + r67945;
double r67947 = r67936 / r67946;
double r67948 = 2.0;
double r67949 = r67948 * r67933;
double r67950 = r67947 / r67949;
double r67951 = -6.373481960958038e-132;
bool r67952 = r67924 <= r67951;
double r67953 = 2.9725940607578363e+74;
bool r67954 = r67924 <= r67953;
double r67955 = r67935 * r67933;
double r67956 = r67955 * r67928;
double r67957 = r67937 - r67956;
double r67958 = sqrt(r67957);
double r67959 = r67943 - r67958;
double r67960 = r67959 / r67949;
double r67961 = 1.0;
double r67962 = r67924 / r67933;
double r67963 = r67929 - r67962;
double r67964 = r67961 * r67963;
double r67965 = r67954 ? r67960 : r67964;
double r67966 = r67952 ? r67930 : r67965;
double r67967 = r67932 ? r67950 : r67966;
double r67968 = r67926 ? r67930 : r67967;
return r67968;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.0 |
|---|---|
| Target | 20.9 |
| Herbie | 9.6 |
if b < -3.438870219673744e+36 or -9.940959811381676e-96 < b < -6.373481960958038e-132Initial program 54.0
Taylor expanded around -inf 6.8
if -3.438870219673744e+36 < b < -9.940959811381676e-96Initial program 41.3
rmApplied flip--41.4
Simplified17.1
Simplified17.1
rmApplied add-cube-cbrt17.3
Applied add-cube-cbrt17.5
Applied sqrt-prod17.5
Applied prod-diff17.5
Simplified17.3
Simplified17.3
if -6.373481960958038e-132 < b < 2.9725940607578363e+74Initial program 11.6
rmApplied associate-*r*11.6
if 2.9725940607578363e+74 < b Initial program 41.8
Taylor expanded around inf 5.3
Simplified5.3
Final simplification9.6
herbie shell --seed 2019322 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))