\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -3.56950087216670373 \cdot 10^{75}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.4951704352063921 \cdot 10^{-301}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{elif}\;b \le 2.12540180880083329 \cdot 10^{133}:\\
\;\;\;\;\frac{\frac{\left(c \cdot 4\right) \cdot a}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r90310 = b;
double r90311 = -r90310;
double r90312 = r90310 * r90310;
double r90313 = 4.0;
double r90314 = a;
double r90315 = r90313 * r90314;
double r90316 = c;
double r90317 = r90315 * r90316;
double r90318 = r90312 - r90317;
double r90319 = sqrt(r90318);
double r90320 = r90311 + r90319;
double r90321 = 2.0;
double r90322 = r90321 * r90314;
double r90323 = r90320 / r90322;
return r90323;
}
double f(double a, double b, double c) {
double r90324 = b;
double r90325 = -3.5695008721667037e+75;
bool r90326 = r90324 <= r90325;
double r90327 = 1.0;
double r90328 = c;
double r90329 = r90328 / r90324;
double r90330 = a;
double r90331 = r90324 / r90330;
double r90332 = r90329 - r90331;
double r90333 = r90327 * r90332;
double r90334 = 1.495170435206392e-301;
bool r90335 = r90324 <= r90334;
double r90336 = 1.0;
double r90337 = 2.0;
double r90338 = r90337 * r90330;
double r90339 = r90324 * r90324;
double r90340 = 4.0;
double r90341 = r90340 * r90330;
double r90342 = r90341 * r90328;
double r90343 = r90339 - r90342;
double r90344 = sqrt(r90343);
double r90345 = r90344 - r90324;
double r90346 = r90338 / r90345;
double r90347 = r90336 / r90346;
double r90348 = 2.1254018088008333e+133;
bool r90349 = r90324 <= r90348;
double r90350 = r90328 * r90340;
double r90351 = r90350 * r90330;
double r90352 = -r90324;
double r90353 = r90352 - r90344;
double r90354 = r90351 / r90353;
double r90355 = r90354 / r90338;
double r90356 = -1.0;
double r90357 = r90356 * r90329;
double r90358 = r90349 ? r90355 : r90357;
double r90359 = r90335 ? r90347 : r90358;
double r90360 = r90326 ? r90333 : r90359;
return r90360;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.2 |
| Herbie | 9.4 |
if b < -3.5695008721667037e+75Initial program 42.1
Taylor expanded around -inf 4.0
Simplified4.0
if -3.5695008721667037e+75 < b < 1.495170435206392e-301Initial program 9.4
rmApplied clear-num9.6
Simplified9.6
if 1.495170435206392e-301 < b < 2.1254018088008333e+133Initial program 33.6
rmApplied flip-+33.6
Simplified16.6
if 2.1254018088008333e+133 < b Initial program 61.9
Taylor expanded around inf 1.7
Final simplification9.4
herbie shell --seed 2019195 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))