\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.847204280282031663920354805138023860461 \cdot 10^{48}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -8.441935351115962169406457345797212275167 \cdot 10^{-251}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}\\
\mathbf{elif}\;b \le 1.406682295301811137671309943547484787165 \cdot 10^{103}:\\
\;\;\;\;\frac{\frac{4 \cdot c}{2}}{\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 r76367 = b;
double r76368 = -r76367;
double r76369 = r76367 * r76367;
double r76370 = 4.0;
double r76371 = a;
double r76372 = c;
double r76373 = r76371 * r76372;
double r76374 = r76370 * r76373;
double r76375 = r76369 - r76374;
double r76376 = sqrt(r76375);
double r76377 = r76368 + r76376;
double r76378 = 2.0;
double r76379 = r76378 * r76371;
double r76380 = r76377 / r76379;
return r76380;
}
double f(double a, double b, double c) {
double r76381 = b;
double r76382 = -2.8472042802820317e+48;
bool r76383 = r76381 <= r76382;
double r76384 = 1.0;
double r76385 = c;
double r76386 = r76385 / r76381;
double r76387 = a;
double r76388 = r76381 / r76387;
double r76389 = r76386 - r76388;
double r76390 = r76384 * r76389;
double r76391 = -8.441935351115962e-251;
bool r76392 = r76381 <= r76391;
double r76393 = 1.0;
double r76394 = 2.0;
double r76395 = r76394 * r76387;
double r76396 = r76381 * r76381;
double r76397 = 4.0;
double r76398 = r76387 * r76385;
double r76399 = r76397 * r76398;
double r76400 = r76396 - r76399;
double r76401 = sqrt(r76400);
double r76402 = r76401 - r76381;
double r76403 = r76395 / r76402;
double r76404 = r76393 / r76403;
double r76405 = 1.4066822953018111e+103;
bool r76406 = r76381 <= r76405;
double r76407 = r76397 * r76385;
double r76408 = r76407 / r76394;
double r76409 = -r76381;
double r76410 = r76409 - r76401;
double r76411 = r76408 / r76410;
double r76412 = -1.0;
double r76413 = r76412 * r76386;
double r76414 = r76406 ? r76411 : r76413;
double r76415 = r76392 ? r76404 : r76414;
double r76416 = r76383 ? r76390 : r76415;
return r76416;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.6 |
| Herbie | 6.6 |
if b < -2.8472042802820317e+48Initial program 38.1
Taylor expanded around -inf 5.2
Simplified5.2
if -2.8472042802820317e+48 < b < -8.441935351115962e-251Initial program 9.0
rmApplied clear-num9.1
Simplified9.1
if -8.441935351115962e-251 < b < 1.4066822953018111e+103Initial program 30.1
rmApplied flip-+30.2
Simplified15.8
rmApplied div-inv15.8
rmApplied pow115.8
Applied pow115.8
Applied pow-prod-down15.8
Simplified15.0
rmApplied times-frac8.9
Simplified8.9
if 1.4066822953018111e+103 < b Initial program 59.1
Taylor expanded around inf 2.2
Final simplification6.6
herbie shell --seed 2019212 +o rules:numerics
(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)))