\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 -2.223763057046510327568967152287533282505 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.351742539702864616278805005197483152899 \cdot 10^{-186}:\\
\;\;\;\;\frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{\frac{2 \cdot a}{\sqrt{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}\\
\mathbf{elif}\;b \le 1.458057835821772074616178333218437979276 \cdot 10^{144}:\\
\;\;\;\;\frac{\left(\frac{1}{2} \cdot 4\right) \cdot c}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r71409 = b;
double r71410 = -r71409;
double r71411 = r71409 * r71409;
double r71412 = 4.0;
double r71413 = a;
double r71414 = c;
double r71415 = r71413 * r71414;
double r71416 = r71412 * r71415;
double r71417 = r71411 - r71416;
double r71418 = sqrt(r71417);
double r71419 = r71410 + r71418;
double r71420 = 2.0;
double r71421 = r71420 * r71413;
double r71422 = r71419 / r71421;
return r71422;
}
double f(double a, double b, double c) {
double r71423 = b;
double r71424 = -2.2237630570465103e+109;
bool r71425 = r71423 <= r71424;
double r71426 = 1.0;
double r71427 = c;
double r71428 = r71427 / r71423;
double r71429 = a;
double r71430 = r71423 / r71429;
double r71431 = r71428 - r71430;
double r71432 = r71426 * r71431;
double r71433 = -2.3517425397028646e-186;
bool r71434 = r71423 <= r71433;
double r71435 = -r71423;
double r71436 = r71423 * r71423;
double r71437 = 4.0;
double r71438 = r71429 * r71427;
double r71439 = r71437 * r71438;
double r71440 = r71436 - r71439;
double r71441 = sqrt(r71440);
double r71442 = r71435 + r71441;
double r71443 = sqrt(r71442);
double r71444 = 2.0;
double r71445 = r71444 * r71429;
double r71446 = r71445 / r71443;
double r71447 = r71443 / r71446;
double r71448 = 1.458057835821772e+144;
bool r71449 = r71423 <= r71448;
double r71450 = 1.0;
double r71451 = r71450 / r71444;
double r71452 = r71451 * r71437;
double r71453 = r71452 * r71427;
double r71454 = r71435 - r71441;
double r71455 = r71453 / r71454;
double r71456 = -1.0;
double r71457 = r71456 * r71428;
double r71458 = r71449 ? r71455 : r71457;
double r71459 = r71434 ? r71447 : r71458;
double r71460 = r71425 ? r71432 : r71459;
return r71460;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 6.7 |
if b < -2.2237630570465103e+109Initial program 48.6
Taylor expanded around -inf 3.3
Simplified3.3
if -2.2237630570465103e+109 < b < -2.3517425397028646e-186Initial program 6.9
rmApplied add-sqr-sqrt7.3
Applied associate-/l*7.3
if -2.3517425397028646e-186 < b < 1.458057835821772e+144Initial program 31.3
rmApplied flip-+31.5
Simplified16.1
rmApplied clear-num16.3
Simplified15.3
rmApplied associate-/l*15.3
Simplified10.2
rmApplied associate-/r*9.9
Simplified9.8
if 1.458057835821772e+144 < b Initial program 62.9
Taylor expanded around inf 1.5
Final simplification6.7
herbie shell --seed 2020001
(FPCore (a b c)
:name "quadp (p42, positive)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))