\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 -4.8371925747446876 \cdot 10^{53}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.67970785211126629 \cdot 10^{-40}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\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 r352 = b;
double r353 = -r352;
double r354 = r352 * r352;
double r355 = 4.0;
double r356 = a;
double r357 = c;
double r358 = r356 * r357;
double r359 = r355 * r358;
double r360 = r354 - r359;
double r361 = sqrt(r360);
double r362 = r353 + r361;
double r363 = 2.0;
double r364 = r363 * r356;
double r365 = r362 / r364;
return r365;
}
double f(double a, double b, double c) {
double r366 = b;
double r367 = -4.837192574744688e+53;
bool r368 = r366 <= r367;
double r369 = 1.0;
double r370 = c;
double r371 = r370 / r366;
double r372 = a;
double r373 = r366 / r372;
double r374 = r371 - r373;
double r375 = r369 * r374;
double r376 = 8.679707852111266e-40;
bool r377 = r366 <= r376;
double r378 = 1.0;
double r379 = 2.0;
double r380 = r379 * r372;
double r381 = -r366;
double r382 = r366 * r366;
double r383 = 4.0;
double r384 = r372 * r370;
double r385 = r383 * r384;
double r386 = r382 - r385;
double r387 = sqrt(r386);
double r388 = r381 + r387;
double r389 = r380 / r388;
double r390 = r378 / r389;
double r391 = -1.0;
double r392 = r391 * r371;
double r393 = r377 ? r390 : r392;
double r394 = r368 ? r375 : r393;
return r394;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.7 |
if b < -4.837192574744688e+53Initial program 37.6
Taylor expanded around -inf 5.7
Simplified5.7
if -4.837192574744688e+53 < b < 8.679707852111266e-40Initial program 15.4
rmApplied clear-num15.5
if 8.679707852111266e-40 < b Initial program 55.1
Taylor expanded around inf 7.5
Final simplification10.7
herbie shell --seed 2020025 +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)))