\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 -2.453262666864975976658380182242705976906 \cdot 10^{76}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 8.958852798091287000832395933283492118861 \cdot 10^{-209}:\\
\;\;\;\;\frac{\frac{1}{\frac{\frac{2}{4}}{c}}}{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)} - b}\\
\mathbf{elif}\;b \le 1.180913557368329815252913260832369757763 \cdot 10^{84}:\\
\;\;\;\;\left(-\frac{b}{2 \cdot a}\right) - \frac{\frac{\sqrt{b \cdot b - \left(c \cdot 4\right) \cdot a}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r64907 = b;
double r64908 = -r64907;
double r64909 = r64907 * r64907;
double r64910 = 4.0;
double r64911 = a;
double r64912 = c;
double r64913 = r64911 * r64912;
double r64914 = r64910 * r64913;
double r64915 = r64909 - r64914;
double r64916 = sqrt(r64915);
double r64917 = r64908 - r64916;
double r64918 = 2.0;
double r64919 = r64918 * r64911;
double r64920 = r64917 / r64919;
return r64920;
}
double f(double a, double b, double c) {
double r64921 = b;
double r64922 = -2.453262666864976e+76;
bool r64923 = r64921 <= r64922;
double r64924 = -1.0;
double r64925 = c;
double r64926 = r64925 / r64921;
double r64927 = r64924 * r64926;
double r64928 = 8.958852798091287e-209;
bool r64929 = r64921 <= r64928;
double r64930 = 1.0;
double r64931 = 2.0;
double r64932 = 4.0;
double r64933 = r64931 / r64932;
double r64934 = r64933 / r64925;
double r64935 = r64930 / r64934;
double r64936 = r64921 * r64921;
double r64937 = a;
double r64938 = r64925 * r64937;
double r64939 = r64932 * r64938;
double r64940 = r64936 - r64939;
double r64941 = sqrt(r64940);
double r64942 = r64941 - r64921;
double r64943 = r64935 / r64942;
double r64944 = 1.1809135573683298e+84;
bool r64945 = r64921 <= r64944;
double r64946 = r64931 * r64937;
double r64947 = r64921 / r64946;
double r64948 = -r64947;
double r64949 = r64925 * r64932;
double r64950 = r64949 * r64937;
double r64951 = r64936 - r64950;
double r64952 = sqrt(r64951);
double r64953 = r64952 / r64931;
double r64954 = r64953 / r64937;
double r64955 = r64948 - r64954;
double r64956 = 1.0;
double r64957 = r64921 / r64937;
double r64958 = r64926 - r64957;
double r64959 = r64956 * r64958;
double r64960 = r64945 ? r64955 : r64959;
double r64961 = r64929 ? r64943 : r64960;
double r64962 = r64923 ? r64927 : r64961;
return r64962;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 6.5 |
if b < -2.453262666864976e+76Initial program 58.6
Simplified58.6
Taylor expanded around -inf 3.0
if -2.453262666864976e+76 < b < 8.958852798091287e-209Initial program 29.1
Simplified29.1
rmApplied flip--29.2
Simplified17.1
Simplified17.1
rmApplied *-un-lft-identity17.1
Applied *-un-lft-identity17.1
Applied times-frac17.1
Applied associate-/l*17.2
Simplified10.9
rmApplied div-inv10.9
Simplified10.6
if 8.958852798091287e-209 < b < 1.1809135573683298e+84Initial program 7.0
Simplified7.0
rmApplied div-sub7.0
Simplified7.0
if 1.1809135573683298e+84 < b Initial program 43.9
Simplified43.9
Taylor expanded around inf 3.5
Simplified3.5
Final simplification6.5
herbie shell --seed 2019194
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))