\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.1214768270116103 \cdot 10^{+154}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 1.199441090208904 \cdot 10^{-250}:\\
\;\;\;\;\frac{c}{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}\\
\mathbf{elif}\;b \le 3.3389954009657566 \cdot 10^{+124}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(-4, \left(c \cdot a\right), \left(b \cdot b\right)\right)}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r37794960 = b;
double r37794961 = -r37794960;
double r37794962 = r37794960 * r37794960;
double r37794963 = 4.0;
double r37794964 = a;
double r37794965 = c;
double r37794966 = r37794964 * r37794965;
double r37794967 = r37794963 * r37794966;
double r37794968 = r37794962 - r37794967;
double r37794969 = sqrt(r37794968);
double r37794970 = r37794961 - r37794969;
double r37794971 = 2.0;
double r37794972 = r37794971 * r37794964;
double r37794973 = r37794970 / r37794972;
return r37794973;
}
double f(double a, double b, double c) {
double r37794974 = b;
double r37794975 = -1.1214768270116103e+154;
bool r37794976 = r37794974 <= r37794975;
double r37794977 = c;
double r37794978 = r37794977 / r37794974;
double r37794979 = -r37794978;
double r37794980 = 1.199441090208904e-250;
bool r37794981 = r37794974 <= r37794980;
double r37794982 = a;
double r37794983 = r37794977 * r37794982;
double r37794984 = -4.0;
double r37794985 = r37794974 * r37794974;
double r37794986 = fma(r37794983, r37794984, r37794985);
double r37794987 = sqrt(r37794986);
double r37794988 = r37794987 - r37794974;
double r37794989 = 2.0;
double r37794990 = r37794988 / r37794989;
double r37794991 = r37794977 / r37794990;
double r37794992 = 3.3389954009657566e+124;
bool r37794993 = r37794974 <= r37794992;
double r37794994 = -r37794974;
double r37794995 = fma(r37794984, r37794983, r37794985);
double r37794996 = sqrt(r37794995);
double r37794997 = r37794994 - r37794996;
double r37794998 = r37794982 * r37794989;
double r37794999 = r37794997 / r37794998;
double r37795000 = r37794974 / r37794982;
double r37795001 = r37794978 - r37795000;
double r37795002 = r37794993 ? r37794999 : r37795001;
double r37795003 = r37794981 ? r37794991 : r37795002;
double r37795004 = r37794976 ? r37794979 : r37795003;
return r37795004;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.8 |
|---|---|
| Target | 20.1 |
| Herbie | 6.4 |
if b < -1.1214768270116103e+154Initial program 62.9
Simplified62.9
Taylor expanded around -inf 1.5
Simplified1.5
if -1.1214768270116103e+154 < b < 1.199441090208904e-250Initial program 32.2
Simplified32.2
rmApplied flip--32.3
Simplified16.1
Simplified16.2
rmApplied *-un-lft-identity16.2
Applied *-un-lft-identity16.2
Applied times-frac16.2
Simplified16.2
Simplified8.4
if 1.199441090208904e-250 < b < 3.3389954009657566e+124Initial program 7.8
Simplified7.8
rmApplied *-un-lft-identity7.8
Applied add-sqr-sqrt8.8
Applied *-un-lft-identity8.8
Applied times-frac8.6
Applied times-frac8.5
Simplified8.5
Simplified7.8
if 3.3389954009657566e+124 < b Initial program 50.5
Simplified50.5
Taylor expanded around inf 3.3
Final simplification6.4
herbie shell --seed 2019128 +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)))