\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 -9661478263987.111328125:\\
\;\;\;\;\frac{-1 \cdot c}{b}\\
\mathbf{elif}\;b \le 8.958852798091287000832395933283492118861 \cdot 10^{-209}:\\
\;\;\;\;\frac{1}{a} \cdot \left(\frac{4 \cdot a}{2} \cdot \frac{c}{\sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)} - b}\right)\\
\mathbf{elif}\;b \le 6.033691444141405046034068616119572110107 \cdot 10^{84}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r63137 = b;
double r63138 = -r63137;
double r63139 = r63137 * r63137;
double r63140 = 4.0;
double r63141 = a;
double r63142 = c;
double r63143 = r63141 * r63142;
double r63144 = r63140 * r63143;
double r63145 = r63139 - r63144;
double r63146 = sqrt(r63145);
double r63147 = r63138 - r63146;
double r63148 = 2.0;
double r63149 = r63148 * r63141;
double r63150 = r63147 / r63149;
return r63150;
}
double f(double a, double b, double c) {
double r63151 = b;
double r63152 = -9661478263987.111;
bool r63153 = r63151 <= r63152;
double r63154 = -1.0;
double r63155 = c;
double r63156 = r63154 * r63155;
double r63157 = r63156 / r63151;
double r63158 = 8.958852798091287e-209;
bool r63159 = r63151 <= r63158;
double r63160 = 1.0;
double r63161 = a;
double r63162 = r63160 / r63161;
double r63163 = 4.0;
double r63164 = r63163 * r63161;
double r63165 = 2.0;
double r63166 = r63164 / r63165;
double r63167 = r63151 * r63151;
double r63168 = r63155 * r63163;
double r63169 = r63161 * r63168;
double r63170 = r63167 - r63169;
double r63171 = sqrt(r63170);
double r63172 = r63171 - r63151;
double r63173 = r63155 / r63172;
double r63174 = r63166 * r63173;
double r63175 = r63162 * r63174;
double r63176 = 6.033691444141405e+84;
bool r63177 = r63151 <= r63176;
double r63178 = -r63151;
double r63179 = r63165 * r63161;
double r63180 = r63178 / r63179;
double r63181 = r63155 * r63161;
double r63182 = r63163 * r63181;
double r63183 = r63167 - r63182;
double r63184 = sqrt(r63183);
double r63185 = r63184 / r63179;
double r63186 = r63180 - r63185;
double r63187 = 1.0;
double r63188 = r63155 / r63151;
double r63189 = r63151 / r63161;
double r63190 = r63188 - r63189;
double r63191 = r63187 * r63190;
double r63192 = r63177 ? r63186 : r63191;
double r63193 = r63159 ? r63175 : r63192;
double r63194 = r63153 ? r63157 : r63193;
return r63194;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 8.0 |
if b < -9661478263987.111Initial program 56.4
Taylor expanded around -inf 5.0
Simplified5.0
if -9661478263987.111 < b < 8.958852798091287e-209Initial program 25.5
rmApplied flip--25.7
Simplified17.5
Simplified17.5
rmApplied associate-/r*17.5
Simplified14.8
rmApplied div-inv15.0
if 8.958852798091287e-209 < b < 6.033691444141405e+84Initial program 7.0
rmApplied div-sub7.0
Simplified7.0
Simplified7.0
if 6.033691444141405e+84 < b Initial program 44.0
Taylor expanded around inf 3.5
Simplified3.5
Final simplification8.0
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)))