\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 -3.031575300615258 \cdot 10^{-39}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 3.2912625180676585 \cdot 10^{+122}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)}}{\frac{a}{\frac{1}{2}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r1565919 = b;
double r1565920 = -r1565919;
double r1565921 = r1565919 * r1565919;
double r1565922 = 4.0;
double r1565923 = a;
double r1565924 = c;
double r1565925 = r1565923 * r1565924;
double r1565926 = r1565922 * r1565925;
double r1565927 = r1565921 - r1565926;
double r1565928 = sqrt(r1565927);
double r1565929 = r1565920 - r1565928;
double r1565930 = 2.0;
double r1565931 = r1565930 * r1565923;
double r1565932 = r1565929 / r1565931;
return r1565932;
}
double f(double a, double b, double c) {
double r1565933 = b;
double r1565934 = -3.031575300615258e-39;
bool r1565935 = r1565933 <= r1565934;
double r1565936 = c;
double r1565937 = r1565936 / r1565933;
double r1565938 = -r1565937;
double r1565939 = 3.2912625180676585e+122;
bool r1565940 = r1565933 <= r1565939;
double r1565941 = -r1565933;
double r1565942 = a;
double r1565943 = r1565936 * r1565942;
double r1565944 = -4.0;
double r1565945 = r1565933 * r1565933;
double r1565946 = fma(r1565943, r1565944, r1565945);
double r1565947 = sqrt(r1565946);
double r1565948 = r1565941 - r1565947;
double r1565949 = 0.5;
double r1565950 = r1565942 / r1565949;
double r1565951 = r1565948 / r1565950;
double r1565952 = r1565933 / r1565942;
double r1565953 = r1565937 - r1565952;
double r1565954 = r1565940 ? r1565951 : r1565953;
double r1565955 = r1565935 ? r1565938 : r1565954;
return r1565955;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.8 |
|---|---|
| Target | 20.1 |
| Herbie | 10.2 |
if b < -3.031575300615258e-39Initial program 53.3
Simplified53.3
Taylor expanded around -inf 7.8
Simplified7.8
if -3.031575300615258e-39 < b < 3.2912625180676585e+122Initial program 13.8
Simplified13.8
rmApplied *-un-lft-identity13.8
Applied associate-/l*13.9
rmApplied div-inv13.9
Applied *-un-lft-identity13.9
Applied times-frac13.9
Applied associate-/r*13.8
Simplified13.8
if 3.2912625180676585e+122 < b Initial program 49.9
Simplified49.9
rmApplied *-un-lft-identity49.9
Applied associate-/l*50.0
rmApplied div-inv50.0
Applied *-un-lft-identity50.0
Applied times-frac50.0
Applied associate-/r*50.0
Simplified49.9
Taylor expanded around inf 3.3
Final simplification10.2
herbie shell --seed 2019128 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))