\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 -3.203999247190537828410646770952979837777 \cdot 10^{59}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 5.330769455174493332636713829620953568317 \cdot 10^{-168}:\\
\;\;\;\;\frac{1}{\frac{2}{\frac{4 \cdot c}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}}\\
\mathbf{elif}\;b \le 3.705250296078930544323375298653357812472 \cdot 10^{-110}:\\
\;\;\;\;\frac{-2 \cdot b}{2 \cdot a}\\
\mathbf{elif}\;b \le 1.031355438277997973881064791355113167797 \cdot 10^{-63}:\\
\;\;\;\;\frac{\frac{\left(4 \cdot c\right) \cdot a}{\frac{\left(b \cdot b - 4 \cdot \left(a \cdot c\right)\right) - b \cdot b}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} + b}}}{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 r108348 = b;
double r108349 = -r108348;
double r108350 = r108348 * r108348;
double r108351 = 4.0;
double r108352 = a;
double r108353 = c;
double r108354 = r108352 * r108353;
double r108355 = r108351 * r108354;
double r108356 = r108350 - r108355;
double r108357 = sqrt(r108356);
double r108358 = r108349 - r108357;
double r108359 = 2.0;
double r108360 = r108359 * r108352;
double r108361 = r108358 / r108360;
return r108361;
}
double f(double a, double b, double c) {
double r108362 = b;
double r108363 = -3.203999247190538e+59;
bool r108364 = r108362 <= r108363;
double r108365 = -1.0;
double r108366 = c;
double r108367 = r108366 / r108362;
double r108368 = r108365 * r108367;
double r108369 = 5.330769455174493e-168;
bool r108370 = r108362 <= r108369;
double r108371 = 1.0;
double r108372 = 2.0;
double r108373 = 4.0;
double r108374 = r108373 * r108366;
double r108375 = r108362 * r108362;
double r108376 = a;
double r108377 = r108376 * r108366;
double r108378 = r108373 * r108377;
double r108379 = r108375 - r108378;
double r108380 = sqrt(r108379);
double r108381 = r108380 - r108362;
double r108382 = r108374 / r108381;
double r108383 = r108372 / r108382;
double r108384 = r108371 / r108383;
double r108385 = 3.7052502960789305e-110;
bool r108386 = r108362 <= r108385;
double r108387 = -2.0;
double r108388 = r108387 * r108362;
double r108389 = r108372 * r108376;
double r108390 = r108388 / r108389;
double r108391 = 1.031355438277998e-63;
bool r108392 = r108362 <= r108391;
double r108393 = r108374 * r108376;
double r108394 = r108379 - r108375;
double r108395 = r108380 + r108362;
double r108396 = r108394 / r108395;
double r108397 = r108393 / r108396;
double r108398 = r108397 / r108389;
double r108399 = 1.0;
double r108400 = r108362 / r108376;
double r108401 = r108367 - r108400;
double r108402 = r108399 * r108401;
double r108403 = r108392 ? r108398 : r108402;
double r108404 = r108386 ? r108390 : r108403;
double r108405 = r108370 ? r108384 : r108404;
double r108406 = r108364 ? r108368 : r108405;
return r108406;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.9 |
if b < -3.203999247190538e+59Initial program 57.1
Taylor expanded around -inf 3.8
if -3.203999247190538e+59 < b < 5.330769455174493e-168Initial program 26.8
rmApplied flip--27.0
Simplified16.4
Simplified16.4
rmApplied *-un-lft-identity16.4
Applied *-un-lft-identity16.4
Applied times-frac16.4
Applied associate-/l*16.5
Simplified16.5
rmApplied associate-/l*16.5
Simplified10.6
if 5.330769455174493e-168 < b < 3.7052502960789305e-110Initial program 6.3
rmApplied flip--21.5
Simplified21.7
Simplified21.7
Taylor expanded around 0 44.9
if 3.7052502960789305e-110 < b < 1.031355438277998e-63Initial program 6.6
rmApplied flip--29.2
Simplified29.5
Simplified29.5
rmApplied flip--29.5
Simplified29.4
if 1.031355438277998e-63 < b Initial program 28.0
Taylor expanded around inf 11.1
Simplified11.1
Final simplification10.9
herbie shell --seed 2019350
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.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)))