\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 -5.58543573862810322 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.3730540219645598 \cdot 10^{-278}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{elif}\;b \le 1.55563303224959 \cdot 10^{106}:\\
\;\;\;\;\frac{1}{\left(\frac{2}{4} \cdot \frac{1}{c}\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 r98312 = b;
double r98313 = -r98312;
double r98314 = r98312 * r98312;
double r98315 = 4.0;
double r98316 = a;
double r98317 = r98315 * r98316;
double r98318 = c;
double r98319 = r98317 * r98318;
double r98320 = r98314 - r98319;
double r98321 = sqrt(r98320);
double r98322 = r98313 + r98321;
double r98323 = 2.0;
double r98324 = r98323 * r98316;
double r98325 = r98322 / r98324;
return r98325;
}
double f(double a, double b, double c) {
double r98326 = b;
double r98327 = -5.585435738628103e+150;
bool r98328 = r98326 <= r98327;
double r98329 = 1.0;
double r98330 = c;
double r98331 = r98330 / r98326;
double r98332 = a;
double r98333 = r98326 / r98332;
double r98334 = r98331 - r98333;
double r98335 = r98329 * r98334;
double r98336 = -2.3730540219645598e-278;
bool r98337 = r98326 <= r98336;
double r98338 = 1.0;
double r98339 = 2.0;
double r98340 = r98339 * r98332;
double r98341 = -r98326;
double r98342 = r98326 * r98326;
double r98343 = 4.0;
double r98344 = r98343 * r98332;
double r98345 = r98344 * r98330;
double r98346 = r98342 - r98345;
double r98347 = sqrt(r98346);
double r98348 = r98341 + r98347;
double r98349 = r98340 / r98348;
double r98350 = r98338 / r98349;
double r98351 = 1.55563303224959e+106;
bool r98352 = r98326 <= r98351;
double r98353 = r98339 / r98343;
double r98354 = r98338 / r98330;
double r98355 = r98353 * r98354;
double r98356 = r98341 - r98347;
double r98357 = r98355 * r98356;
double r98358 = r98338 / r98357;
double r98359 = -1.0;
double r98360 = r98359 * r98331;
double r98361 = r98352 ? r98358 : r98360;
double r98362 = r98337 ? r98350 : r98361;
double r98363 = r98328 ? r98335 : r98362;
return r98363;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.7 |
| Herbie | 6.9 |
if b < -5.585435738628103e+150Initial program 61.5
Taylor expanded around -inf 2.2
Simplified2.2
if -5.585435738628103e+150 < b < -2.3730540219645598e-278Initial program 8.1
rmApplied clear-num8.3
if -2.3730540219645598e-278 < b < 1.55563303224959e+106Initial program 31.3
rmApplied flip-+31.3
Simplified16.7
rmApplied *-un-lft-identity16.7
Applied *-un-lft-identity16.7
Applied times-frac16.7
Applied associate-/l*16.9
Simplified16.2
rmApplied times-frac16.2
Simplified9.9
if 1.55563303224959e+106 < b Initial program 60.3
Taylor expanded around inf 2.7
Final simplification6.9
herbie shell --seed 2020062 +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)))