\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.6257289292067596 \cdot 10^{+144}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 1.739098950628615 \cdot 10^{-79}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(c \cdot a\right)\right)} - b}}}{2}\\
\mathbf{elif}\;b \le 1.8656332031849816 \cdot 10^{-25}:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\
\mathbf{elif}\;b \le 5.297236684235463 \cdot 10^{-16}:\\
\;\;\;\;\frac{\frac{1}{\frac{a}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(c \cdot a\right)\right)} - b}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\
\end{array}double f(double a, double b, double c) {
double r2192931 = b;
double r2192932 = -r2192931;
double r2192933 = r2192931 * r2192931;
double r2192934 = 4.0;
double r2192935 = a;
double r2192936 = r2192934 * r2192935;
double r2192937 = c;
double r2192938 = r2192936 * r2192937;
double r2192939 = r2192933 - r2192938;
double r2192940 = sqrt(r2192939);
double r2192941 = r2192932 + r2192940;
double r2192942 = 2.0;
double r2192943 = r2192942 * r2192935;
double r2192944 = r2192941 / r2192943;
return r2192944;
}
double f(double a, double b, double c) {
double r2192945 = b;
double r2192946 = -1.6257289292067596e+144;
bool r2192947 = r2192945 <= r2192946;
double r2192948 = c;
double r2192949 = r2192948 / r2192945;
double r2192950 = a;
double r2192951 = r2192945 / r2192950;
double r2192952 = r2192949 - r2192951;
double r2192953 = 2.0;
double r2192954 = r2192952 * r2192953;
double r2192955 = r2192954 / r2192953;
double r2192956 = 1.739098950628615e-79;
bool r2192957 = r2192945 <= r2192956;
double r2192958 = 1.0;
double r2192959 = -4.0;
double r2192960 = r2192948 * r2192950;
double r2192961 = r2192959 * r2192960;
double r2192962 = fma(r2192945, r2192945, r2192961);
double r2192963 = sqrt(r2192962);
double r2192964 = r2192963 - r2192945;
double r2192965 = r2192950 / r2192964;
double r2192966 = r2192958 / r2192965;
double r2192967 = r2192966 / r2192953;
double r2192968 = 1.8656332031849816e-25;
bool r2192969 = r2192945 <= r2192968;
double r2192970 = -2.0;
double r2192971 = r2192949 * r2192970;
double r2192972 = r2192971 / r2192953;
double r2192973 = 5.297236684235463e-16;
bool r2192974 = r2192945 <= r2192973;
double r2192975 = r2192974 ? r2192967 : r2192972;
double r2192976 = r2192969 ? r2192972 : r2192975;
double r2192977 = r2192957 ? r2192967 : r2192976;
double r2192978 = r2192947 ? r2192955 : r2192977;
return r2192978;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 20.3 |
| Herbie | 9.7 |
if b < -1.6257289292067596e+144Initial program 58.0
Simplified58.0
Taylor expanded around -inf 2.5
Simplified2.5
if -1.6257289292067596e+144 < b < 1.739098950628615e-79 or 1.8656332031849816e-25 < b < 5.297236684235463e-16Initial program 12.3
Simplified12.3
rmApplied clear-num12.4
Taylor expanded around 0 12.4
Simplified12.4
if 1.739098950628615e-79 < b < 1.8656332031849816e-25 or 5.297236684235463e-16 < b Initial program 53.2
Simplified53.2
Taylor expanded around inf 8.2
Final simplification9.7
herbie shell --seed 2019156 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))