\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{\frac{1}{0.5} \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 r71393 = b;
double r71394 = -r71393;
double r71395 = r71393 * r71393;
double r71396 = 4.0;
double r71397 = a;
double r71398 = c;
double r71399 = r71397 * r71398;
double r71400 = r71396 * r71399;
double r71401 = r71395 - r71400;
double r71402 = sqrt(r71401);
double r71403 = r71394 + r71402;
double r71404 = 2.0;
double r71405 = r71404 * r71397;
double r71406 = r71403 / r71405;
return r71406;
}
double f(double a, double b, double c) {
double r71407 = b;
double r71408 = -2.2237630570465103e+109;
bool r71409 = r71407 <= r71408;
double r71410 = 1.0;
double r71411 = c;
double r71412 = r71411 / r71407;
double r71413 = a;
double r71414 = r71407 / r71413;
double r71415 = r71412 - r71414;
double r71416 = r71410 * r71415;
double r71417 = -2.3517425397028646e-186;
bool r71418 = r71407 <= r71417;
double r71419 = -r71407;
double r71420 = r71407 * r71407;
double r71421 = 4.0;
double r71422 = r71413 * r71411;
double r71423 = r71421 * r71422;
double r71424 = r71420 - r71423;
double r71425 = sqrt(r71424);
double r71426 = r71419 + r71425;
double r71427 = sqrt(r71426);
double r71428 = 2.0;
double r71429 = r71428 * r71413;
double r71430 = r71429 / r71427;
double r71431 = r71427 / r71430;
double r71432 = 1.458057835821772e+144;
bool r71433 = r71407 <= r71432;
double r71434 = 1.0;
double r71435 = 0.5;
double r71436 = r71434 / r71435;
double r71437 = r71436 * r71411;
double r71438 = r71419 - r71425;
double r71439 = r71437 / r71438;
double r71440 = -1.0;
double r71441 = r71440 * r71412;
double r71442 = r71433 ? r71439 : r71441;
double r71443 = r71418 ? r71431 : r71442;
double r71444 = r71409 ? r71416 : r71443;
return r71444;
}




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 *-un-lft-identity16.1
Applied *-un-lft-identity16.1
Applied times-frac16.1
Applied associate-/l*16.3
Simplified15.3
Taylor expanded around 0 10.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)))