\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.674469085146396739103610609439188639717 \cdot 10^{110}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 7.061692521831335565675525372535211636164 \cdot 10^{-266}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)} - b}\\
\mathbf{elif}\;b \le 1.715181108188238274259588142060201574853 \cdot 10^{78}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot b}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r64952 = b;
double r64953 = -r64952;
double r64954 = r64952 * r64952;
double r64955 = 4.0;
double r64956 = a;
double r64957 = c;
double r64958 = r64956 * r64957;
double r64959 = r64955 * r64958;
double r64960 = r64954 - r64959;
double r64961 = sqrt(r64960);
double r64962 = r64953 - r64961;
double r64963 = 2.0;
double r64964 = r64963 * r64956;
double r64965 = r64962 / r64964;
return r64965;
}
double f(double a, double b, double c) {
double r64966 = b;
double r64967 = -5.674469085146397e+110;
bool r64968 = r64966 <= r64967;
double r64969 = -1.0;
double r64970 = c;
double r64971 = r64970 / r64966;
double r64972 = r64969 * r64971;
double r64973 = 7.061692521831336e-266;
bool r64974 = r64966 <= r64973;
double r64975 = 2.0;
double r64976 = r64975 * r64970;
double r64977 = 4.0;
double r64978 = a;
double r64979 = r64978 * r64970;
double r64980 = r64977 * r64979;
double r64981 = -r64980;
double r64982 = fma(r64966, r64966, r64981);
double r64983 = sqrt(r64982);
double r64984 = r64983 - r64966;
double r64985 = r64976 / r64984;
double r64986 = 1.7151811081882383e+78;
bool r64987 = r64966 <= r64986;
double r64988 = -r64966;
double r64989 = r64966 * r64966;
double r64990 = r64989 - r64980;
double r64991 = sqrt(r64990);
double r64992 = r64988 - r64991;
double r64993 = r64975 * r64978;
double r64994 = r64992 / r64993;
double r64995 = -2.0;
double r64996 = r64995 * r64966;
double r64997 = r64996 / r64993;
double r64998 = r64987 ? r64994 : r64997;
double r64999 = r64974 ? r64985 : r64998;
double r65000 = r64968 ? r64972 : r64999;
return r65000;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.9 |
|---|---|
| Target | 21.0 |
| Herbie | 6.7 |
if b < -5.674469085146397e+110Initial program 59.7
Taylor expanded around -inf 2.7
if -5.674469085146397e+110 < b < 7.061692521831336e-266Initial program 31.8
rmApplied flip--31.8
Simplified16.1
Simplified16.1
rmApplied div-inv16.1
rmApplied associate-*l/15.2
Simplified15.1
Taylor expanded around 0 8.7
if 7.061692521831336e-266 < b < 1.7151811081882383e+78Initial program 8.6
rmApplied *-un-lft-identity8.6
if 1.7151811081882383e+78 < b Initial program 43.0
rmApplied flip--62.6
Simplified61.8
Simplified61.8
Taylor expanded around 0 4.8
Final simplification6.7
herbie shell --seed 2019303 +o rules:numerics
(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)))