\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 -3995085856351435358208:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 1.369663197338588139608765037558519461426 \cdot 10^{-61}:\\
\;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} + \left(-b\right)\right) \cdot \frac{\frac{1}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} \cdot -1\\
\end{array}double f(double a, double b, double c) {
double r70326 = b;
double r70327 = -r70326;
double r70328 = r70326 * r70326;
double r70329 = 4.0;
double r70330 = a;
double r70331 = c;
double r70332 = r70330 * r70331;
double r70333 = r70329 * r70332;
double r70334 = r70328 - r70333;
double r70335 = sqrt(r70334);
double r70336 = r70327 + r70335;
double r70337 = 2.0;
double r70338 = r70337 * r70330;
double r70339 = r70336 / r70338;
return r70339;
}
double f(double a, double b, double c) {
double r70340 = b;
double r70341 = -3.9950858563514354e+21;
bool r70342 = r70340 <= r70341;
double r70343 = c;
double r70344 = r70343 / r70340;
double r70345 = a;
double r70346 = r70340 / r70345;
double r70347 = r70344 - r70346;
double r70348 = 1.0;
double r70349 = r70347 * r70348;
double r70350 = 1.3696631973385881e-61;
bool r70351 = r70340 <= r70350;
double r70352 = r70340 * r70340;
double r70353 = r70345 * r70343;
double r70354 = 4.0;
double r70355 = r70353 * r70354;
double r70356 = r70352 - r70355;
double r70357 = sqrt(r70356);
double r70358 = -r70340;
double r70359 = r70357 + r70358;
double r70360 = 1.0;
double r70361 = r70360 / r70345;
double r70362 = 2.0;
double r70363 = r70361 / r70362;
double r70364 = r70359 * r70363;
double r70365 = -1.0;
double r70366 = r70344 * r70365;
double r70367 = r70351 ? r70364 : r70366;
double r70368 = r70342 ? r70349 : r70367;
return r70368;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.6 |
|---|---|
| Target | 21.0 |
| Herbie | 10.3 |
if b < -3.9950858563514354e+21Initial program 35.4
Taylor expanded around -inf 6.5
Simplified6.5
if -3.9950858563514354e+21 < b < 1.3696631973385881e-61Initial program 14.6
rmApplied div-inv14.8
Simplified14.8
if 1.3696631973385881e-61 < b Initial program 53.7
rmApplied div-inv53.7
Simplified53.7
Taylor expanded around inf 8.2
Final simplification10.3
herbie shell --seed 2019194
(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)))