\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 -1.547666603636537260513437138645901028344 \cdot 10^{50}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 7.455592343308264166675918758902222662503 \cdot 10^{-170}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r116316 = b;
double r116317 = -r116316;
double r116318 = r116316 * r116316;
double r116319 = 4.0;
double r116320 = a;
double r116321 = r116319 * r116320;
double r116322 = c;
double r116323 = r116321 * r116322;
double r116324 = r116318 - r116323;
double r116325 = sqrt(r116324);
double r116326 = r116317 + r116325;
double r116327 = 2.0;
double r116328 = r116327 * r116320;
double r116329 = r116326 / r116328;
return r116329;
}
double f(double a, double b, double c) {
double r116330 = b;
double r116331 = -1.5476666036365373e+50;
bool r116332 = r116330 <= r116331;
double r116333 = 1.0;
double r116334 = c;
double r116335 = r116334 / r116330;
double r116336 = a;
double r116337 = r116330 / r116336;
double r116338 = r116335 - r116337;
double r116339 = r116333 * r116338;
double r116340 = 7.455592343308264e-170;
bool r116341 = r116330 <= r116340;
double r116342 = 1.0;
double r116343 = 2.0;
double r116344 = r116343 * r116336;
double r116345 = r116330 * r116330;
double r116346 = 4.0;
double r116347 = r116346 * r116336;
double r116348 = r116347 * r116334;
double r116349 = r116345 - r116348;
double r116350 = sqrt(r116349);
double r116351 = r116350 - r116330;
double r116352 = r116344 / r116351;
double r116353 = r116342 / r116352;
double r116354 = -1.0;
double r116355 = r116354 * r116335;
double r116356 = r116341 ? r116353 : r116355;
double r116357 = r116332 ? r116339 : r116356;
return r116357;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 20.8 |
| Herbie | 11.9 |
if b < -1.5476666036365373e+50Initial program 37.8
Simplified37.8
Taylor expanded around -inf 5.8
Simplified5.8
if -1.5476666036365373e+50 < b < 7.455592343308264e-170Initial program 12.4
Simplified12.4
rmApplied clear-num12.5
if 7.455592343308264e-170 < b Initial program 48.9
Simplified48.9
Taylor expanded around inf 14.1
Final simplification11.9
herbie shell --seed 2019323 +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)))