\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.2303558036345968 \cdot 10^{-110}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 5.869467752933353 \cdot 10^{+121}:\\
\;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{(\left(c \cdot a\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r7384903 = b;
double r7384904 = -r7384903;
double r7384905 = r7384903 * r7384903;
double r7384906 = 4.0;
double r7384907 = a;
double r7384908 = c;
double r7384909 = r7384907 * r7384908;
double r7384910 = r7384906 * r7384909;
double r7384911 = r7384905 - r7384910;
double r7384912 = sqrt(r7384911);
double r7384913 = r7384904 - r7384912;
double r7384914 = 2.0;
double r7384915 = r7384914 * r7384907;
double r7384916 = r7384913 / r7384915;
return r7384916;
}
double f(double a, double b, double c) {
double r7384917 = b;
double r7384918 = -1.2303558036345968e-110;
bool r7384919 = r7384917 <= r7384918;
double r7384920 = c;
double r7384921 = r7384920 / r7384917;
double r7384922 = -r7384921;
double r7384923 = 5.869467752933353e+121;
bool r7384924 = r7384917 <= r7384923;
double r7384925 = -r7384917;
double r7384926 = a;
double r7384927 = r7384920 * r7384926;
double r7384928 = -4.0;
double r7384929 = r7384917 * r7384917;
double r7384930 = fma(r7384927, r7384928, r7384929);
double r7384931 = sqrt(r7384930);
double r7384932 = r7384925 - r7384931;
double r7384933 = 2.0;
double r7384934 = r7384932 / r7384933;
double r7384935 = r7384934 / r7384926;
double r7384936 = r7384917 / r7384926;
double r7384937 = r7384921 - r7384936;
double r7384938 = r7384924 ? r7384935 : r7384937;
double r7384939 = r7384919 ? r7384922 : r7384938;
return r7384939;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.2 |
| Herbie | 9.6 |
if b < -1.2303558036345968e-110Initial program 50.8
Simplified50.8
Taylor expanded around inf 50.8
Simplified50.8
rmApplied *-un-lft-identity50.8
Applied div-inv50.8
Applied times-frac50.8
Simplified50.8
Simplified50.8
Taylor expanded around -inf 10.2
Simplified10.2
if -1.2303558036345968e-110 < b < 5.869467752933353e+121Initial program 11.0
Simplified11.0
Taylor expanded around inf 11.0
Simplified11.0
if 5.869467752933353e+121 < b Initial program 51.7
Simplified51.7
Taylor expanded around inf 51.7
Simplified51.7
rmApplied *-un-lft-identity51.7
Applied div-inv51.7
Applied times-frac51.7
Simplified51.7
Simplified51.7
Taylor expanded around inf 3.4
Final simplification9.6
herbie shell --seed 2019119 +o rules:numerics
(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)))