\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 -5.263290697710817942239037357803149075237 \cdot 10^{146}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.182382645844658784648715405900710208288 \cdot 10^{-295}:\\
\;\;\;\;\frac{1}{\frac{\frac{2 \cdot a}{4 \cdot a}}{\frac{c}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}}\\
\mathbf{elif}\;b \le 3.160759192577644243019157975166466824718 \cdot 10^{143}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{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 r72959 = b;
double r72960 = -r72959;
double r72961 = r72959 * r72959;
double r72962 = 4.0;
double r72963 = a;
double r72964 = c;
double r72965 = r72963 * r72964;
double r72966 = r72962 * r72965;
double r72967 = r72961 - r72966;
double r72968 = sqrt(r72967);
double r72969 = r72960 - r72968;
double r72970 = 2.0;
double r72971 = r72970 * r72963;
double r72972 = r72969 / r72971;
return r72972;
}
double f(double a, double b, double c) {
double r72973 = b;
double r72974 = -5.263290697710818e+146;
bool r72975 = r72973 <= r72974;
double r72976 = -1.0;
double r72977 = c;
double r72978 = r72977 / r72973;
double r72979 = r72976 * r72978;
double r72980 = -2.182382645844659e-295;
bool r72981 = r72973 <= r72980;
double r72982 = 1.0;
double r72983 = 2.0;
double r72984 = a;
double r72985 = r72983 * r72984;
double r72986 = 4.0;
double r72987 = r72986 * r72984;
double r72988 = r72985 / r72987;
double r72989 = r72973 * r72973;
double r72990 = r72984 * r72977;
double r72991 = r72986 * r72990;
double r72992 = r72989 - r72991;
double r72993 = sqrt(r72992);
double r72994 = r72993 - r72973;
double r72995 = r72977 / r72994;
double r72996 = r72988 / r72995;
double r72997 = r72982 / r72996;
double r72998 = 3.1607591925776442e+143;
bool r72999 = r72973 <= r72998;
double r73000 = -r72973;
double r73001 = r73000 - r72993;
double r73002 = r73001 / r72985;
double r73003 = 1.0;
double r73004 = r72973 / r72984;
double r73005 = r72978 - r73004;
double r73006 = r73003 * r73005;
double r73007 = r72999 ? r73002 : r73006;
double r73008 = r72981 ? r72997 : r73007;
double r73009 = r72975 ? r72979 : r73008;
return r73009;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.6 |
|---|---|
| Target | 20.9 |
| Herbie | 6.3 |
if b < -5.263290697710818e+146Initial program 63.1
Taylor expanded around -inf 1.3
if -5.263290697710818e+146 < b < -2.182382645844659e-295Initial program 34.7
rmApplied flip--34.7
Simplified15.7
Simplified15.7
rmApplied clear-num15.9
Simplified15.9
rmApplied *-un-lft-identity15.9
Applied times-frac13.5
Applied associate-/r*7.6
Simplified7.6
if -2.182382645844659e-295 < b < 3.1607591925776442e+143Initial program 9.3
if 3.1607591925776442e+143 < b Initial program 59.6
Taylor expanded around inf 2.3
Simplified2.3
Final simplification6.3
herbie shell --seed 2019325
(FPCore (a b c)
:name "The quadratic formula (r2)"
: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)))