\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.2375225949334019 \cdot 10^{57}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.67970785211126629 \cdot 10^{-40}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r342 = b;
double r343 = -r342;
double r344 = r342 * r342;
double r345 = 4.0;
double r346 = a;
double r347 = c;
double r348 = r346 * r347;
double r349 = r345 * r348;
double r350 = r344 - r349;
double r351 = sqrt(r350);
double r352 = r343 + r351;
double r353 = 2.0;
double r354 = r353 * r346;
double r355 = r352 / r354;
return r355;
}
double f(double a, double b, double c) {
double r356 = b;
double r357 = -2.237522594933402e+57;
bool r358 = r356 <= r357;
double r359 = 1.0;
double r360 = c;
double r361 = r360 / r356;
double r362 = a;
double r363 = r356 / r362;
double r364 = r361 - r363;
double r365 = r359 * r364;
double r366 = 8.679707852111266e-40;
bool r367 = r356 <= r366;
double r368 = -r356;
double r369 = r356 * r356;
double r370 = 4.0;
double r371 = r362 * r360;
double r372 = r370 * r371;
double r373 = r369 - r372;
double r374 = sqrt(r373);
double r375 = r368 + r374;
double r376 = 2.0;
double r377 = r376 * r362;
double r378 = r375 / r377;
double r379 = -1.0;
double r380 = r379 * r361;
double r381 = r367 ? r378 : r380;
double r382 = r358 ? r365 : r381;
return r382;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.6 |
if b < -2.237522594933402e+57Initial program 38.1
Taylor expanded around -inf 5.5
Simplified5.5
if -2.237522594933402e+57 < b < 8.679707852111266e-40Initial program 15.3
if 8.679707852111266e-40 < b Initial program 55.1
Taylor expanded around inf 7.5
Final simplification10.6
herbie shell --seed 2020025
(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)))