\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 -1.2890050783826923 \cdot 10^{-183}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 1.9396144761399596 \cdot 10^{+100}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r3716940 = b;
double r3716941 = -r3716940;
double r3716942 = r3716940 * r3716940;
double r3716943 = 4.0;
double r3716944 = a;
double r3716945 = c;
double r3716946 = r3716944 * r3716945;
double r3716947 = r3716943 * r3716946;
double r3716948 = r3716942 - r3716947;
double r3716949 = sqrt(r3716948);
double r3716950 = r3716941 - r3716949;
double r3716951 = 2.0;
double r3716952 = r3716951 * r3716944;
double r3716953 = r3716950 / r3716952;
return r3716953;
}
double f(double a, double b, double c) {
double r3716954 = b;
double r3716955 = -1.2890050783826923e-183;
bool r3716956 = r3716954 <= r3716955;
double r3716957 = c;
double r3716958 = r3716957 / r3716954;
double r3716959 = -r3716958;
double r3716960 = 1.9396144761399596e+100;
bool r3716961 = r3716954 <= r3716960;
double r3716962 = -r3716954;
double r3716963 = r3716954 * r3716954;
double r3716964 = a;
double r3716965 = r3716957 * r3716964;
double r3716966 = 4.0;
double r3716967 = r3716965 * r3716966;
double r3716968 = r3716963 - r3716967;
double r3716969 = sqrt(r3716968);
double r3716970 = r3716962 - r3716969;
double r3716971 = 2.0;
double r3716972 = r3716964 * r3716971;
double r3716973 = r3716970 / r3716972;
double r3716974 = r3716954 / r3716964;
double r3716975 = r3716958 - r3716974;
double r3716976 = r3716961 ? r3716973 : r3716975;
double r3716977 = r3716956 ? r3716959 : r3716976;
return r3716977;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.5 |
| Herbie | 11.2 |
if b < -1.2890050783826923e-183Initial program 48.2
Taylor expanded around -inf 14.3
Simplified14.3
if -1.2890050783826923e-183 < b < 1.9396144761399596e+100Initial program 10.5
Taylor expanded around -inf 10.5
Simplified10.5
if 1.9396144761399596e+100 < b Initial program 44.2
Taylor expanded around -inf 44.2
Simplified44.2
Taylor expanded around inf 3.4
Final simplification11.2
herbie shell --seed 2019151
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 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)))