\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.828737593568666707297780122417133955299 \cdot 10^{109}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le -4.565615297402513793822059617442033581563 \cdot 10^{-201}:\\
\;\;\;\;\frac{\left|\sqrt[3]{{b}^{2} - 4 \cdot \left(a \cdot c\right)}\right| \cdot \sqrt{\sqrt[3]{{b}^{2} - 4 \cdot \left(a \cdot c\right)}} + \left(-b\right)}{a \cdot 2}\\
\mathbf{elif}\;b \le 4.287176096066254708923845932443784224798 \cdot 10^{77}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\frac{4}{\frac{1}{c}}}{-\left(b + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot -1}{b}\\
\end{array}double f(double a, double b, double c) {
double r86436 = b;
double r86437 = -r86436;
double r86438 = r86436 * r86436;
double r86439 = 4.0;
double r86440 = a;
double r86441 = c;
double r86442 = r86440 * r86441;
double r86443 = r86439 * r86442;
double r86444 = r86438 - r86443;
double r86445 = sqrt(r86444);
double r86446 = r86437 + r86445;
double r86447 = 2.0;
double r86448 = r86447 * r86440;
double r86449 = r86446 / r86448;
return r86449;
}
double f(double a, double b, double c) {
double r86450 = b;
double r86451 = -3.828737593568667e+109;
bool r86452 = r86450 <= r86451;
double r86453 = c;
double r86454 = r86453 / r86450;
double r86455 = a;
double r86456 = r86450 / r86455;
double r86457 = r86454 - r86456;
double r86458 = 1.0;
double r86459 = r86457 * r86458;
double r86460 = -4.565615297402514e-201;
bool r86461 = r86450 <= r86460;
double r86462 = 2.0;
double r86463 = pow(r86450, r86462);
double r86464 = 4.0;
double r86465 = r86455 * r86453;
double r86466 = r86464 * r86465;
double r86467 = r86463 - r86466;
double r86468 = cbrt(r86467);
double r86469 = fabs(r86468);
double r86470 = sqrt(r86468);
double r86471 = r86469 * r86470;
double r86472 = -r86450;
double r86473 = r86471 + r86472;
double r86474 = 2.0;
double r86475 = r86455 * r86474;
double r86476 = r86473 / r86475;
double r86477 = 4.2871760960662547e+77;
bool r86478 = r86450 <= r86477;
double r86479 = 1.0;
double r86480 = r86479 / r86474;
double r86481 = r86479 / r86453;
double r86482 = r86464 / r86481;
double r86483 = r86450 * r86450;
double r86484 = r86483 - r86466;
double r86485 = sqrt(r86484);
double r86486 = r86450 + r86485;
double r86487 = -r86486;
double r86488 = r86482 / r86487;
double r86489 = r86480 * r86488;
double r86490 = -1.0;
double r86491 = r86453 * r86490;
double r86492 = r86491 / r86450;
double r86493 = r86478 ? r86489 : r86492;
double r86494 = r86461 ? r86476 : r86493;
double r86495 = r86452 ? r86459 : r86494;
return r86495;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.0 |
| Herbie | 7.2 |
if b < -3.828737593568667e+109Initial program 49.5
Taylor expanded around -inf 3.7
Simplified3.7
if -3.828737593568667e+109 < b < -4.565615297402514e-201Initial program 8.1
rmApplied add-cube-cbrt8.5
Applied sqrt-prod8.5
Simplified8.5
Simplified8.5
if -4.565615297402514e-201 < b < 4.2871760960662547e+77Initial program 28.4
rmApplied flip-+28.5
Simplified16.7
Simplified16.7
rmApplied *-un-lft-identity16.7
rmApplied *-un-lft-identity16.7
Applied times-frac16.7
Applied times-frac16.7
Simplified16.7
Simplified16.3
rmApplied associate-/l*16.3
Simplified10.3
if 4.2871760960662547e+77 < b Initial program 58.5
Taylor expanded around inf 3.5
Simplified3.5
Final simplification7.2
herbie shell --seed 2019196
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))