\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -3.12428337420519208 \cdot 10^{57}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 6.78592592067132194 \cdot 10^{-105}:\\
\;\;\;\;\frac{1}{\frac{2}{\frac{\sqrt{{b}^{2} - 4 \cdot \left(a \cdot c\right)} - b}{a}}}\\
\mathbf{elif}\;b \le 1.04869647254834991 \cdot 10^{-20}:\\
\;\;\;\;\frac{\left(4 \cdot a\right) \cdot c + b \cdot \left(b - b\right)}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r163321 = b;
double r163322 = -r163321;
double r163323 = r163321 * r163321;
double r163324 = 4.0;
double r163325 = a;
double r163326 = r163324 * r163325;
double r163327 = c;
double r163328 = r163326 * r163327;
double r163329 = r163323 - r163328;
double r163330 = sqrt(r163329);
double r163331 = r163322 + r163330;
double r163332 = 2.0;
double r163333 = r163332 * r163325;
double r163334 = r163331 / r163333;
return r163334;
}
double f(double a, double b, double c) {
double r163335 = b;
double r163336 = -3.124283374205192e+57;
bool r163337 = r163335 <= r163336;
double r163338 = 1.0;
double r163339 = c;
double r163340 = r163339 / r163335;
double r163341 = a;
double r163342 = r163335 / r163341;
double r163343 = r163340 - r163342;
double r163344 = r163338 * r163343;
double r163345 = 6.785925920671322e-105;
bool r163346 = r163335 <= r163345;
double r163347 = 1.0;
double r163348 = 2.0;
double r163349 = 2.0;
double r163350 = pow(r163335, r163349);
double r163351 = 4.0;
double r163352 = r163341 * r163339;
double r163353 = r163351 * r163352;
double r163354 = r163350 - r163353;
double r163355 = sqrt(r163354);
double r163356 = r163355 - r163335;
double r163357 = r163356 / r163341;
double r163358 = r163348 / r163357;
double r163359 = r163347 / r163358;
double r163360 = 1.0486964725483499e-20;
bool r163361 = r163335 <= r163360;
double r163362 = r163351 * r163341;
double r163363 = r163362 * r163339;
double r163364 = r163335 - r163335;
double r163365 = r163335 * r163364;
double r163366 = r163363 + r163365;
double r163367 = r163348 * r163341;
double r163368 = -r163335;
double r163369 = r163335 * r163335;
double r163370 = r163369 - r163363;
double r163371 = sqrt(r163370);
double r163372 = r163368 - r163371;
double r163373 = r163367 * r163372;
double r163374 = r163366 / r163373;
double r163375 = -1.0;
double r163376 = r163375 * r163340;
double r163377 = r163361 ? r163374 : r163376;
double r163378 = r163346 ? r163359 : r163377;
double r163379 = r163337 ? r163344 : r163378;
return r163379;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.4 |
| Herbie | 9.5 |
if b < -3.124283374205192e+57Initial program 39.5
Taylor expanded around -inf 5.4
Simplified5.4
if -3.124283374205192e+57 < b < 6.785925920671322e-105Initial program 11.8
Taylor expanded around 0 11.8
rmApplied clear-num11.9
Simplified11.9
if 6.785925920671322e-105 < b < 1.0486964725483499e-20Initial program 34.8
rmApplied flip-+34.8
Simplified17.9
rmApplied div-inv18.0
Applied associate-/l*23.7
Simplified23.6
if 1.0486964725483499e-20 < b Initial program 55.5
Taylor expanded around inf 6.4
Final simplification9.5
herbie shell --seed 2020045 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
: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)))