\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.5961406266953245 \cdot 10^{-58}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 3.1115579814291686 \cdot 10^{+29}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;-\frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r3213248 = b;
double r3213249 = -r3213248;
double r3213250 = r3213248 * r3213248;
double r3213251 = 4.0;
double r3213252 = a;
double r3213253 = c;
double r3213254 = r3213252 * r3213253;
double r3213255 = r3213251 * r3213254;
double r3213256 = r3213250 - r3213255;
double r3213257 = sqrt(r3213256);
double r3213258 = r3213249 - r3213257;
double r3213259 = 2.0;
double r3213260 = r3213259 * r3213252;
double r3213261 = r3213258 / r3213260;
return r3213261;
}
double f(double a, double b, double c) {
double r3213262 = b;
double r3213263 = -1.5961406266953245e-58;
bool r3213264 = r3213262 <= r3213263;
double r3213265 = c;
double r3213266 = r3213265 / r3213262;
double r3213267 = -r3213266;
double r3213268 = 3.1115579814291686e+29;
bool r3213269 = r3213262 <= r3213268;
double r3213270 = -r3213262;
double r3213271 = r3213262 * r3213262;
double r3213272 = a;
double r3213273 = r3213265 * r3213272;
double r3213274 = 4.0;
double r3213275 = r3213273 * r3213274;
double r3213276 = r3213271 - r3213275;
double r3213277 = sqrt(r3213276);
double r3213278 = r3213270 - r3213277;
double r3213279 = 2.0;
double r3213280 = r3213272 * r3213279;
double r3213281 = r3213278 / r3213280;
double r3213282 = r3213262 / r3213272;
double r3213283 = -r3213282;
double r3213284 = r3213269 ? r3213281 : r3213283;
double r3213285 = r3213264 ? r3213267 : r3213284;
return r3213285;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.6 |
| Herbie | 10.4 |
if b < -1.5961406266953245e-58Initial program 53.4
Taylor expanded around -inf 8.1
Simplified8.1
if -1.5961406266953245e-58 < b < 3.1115579814291686e+29Initial program 14.7
rmApplied *-un-lft-identity14.7
Applied *-un-lft-identity14.7
Applied distribute-rgt-neg-in14.7
Applied distribute-lft-out--14.7
Applied associate-/l*14.9
rmApplied div-inv14.9
Applied *-un-lft-identity14.9
Applied times-frac14.9
Simplified14.8
rmApplied associate-*l/14.7
Simplified14.7
if 3.1115579814291686e+29 < b Initial program 34.4
rmApplied *-un-lft-identity34.4
Applied *-un-lft-identity34.4
Applied distribute-rgt-neg-in34.4
Applied distribute-lft-out--34.4
Applied associate-/l*34.5
Taylor expanded around 0 6.5
Simplified6.5
Final simplification10.4
herbie shell --seed 2019134
(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)))