\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 -1.075953179536434403809045843723111238623 \cdot 10^{-63}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2000198799923726.5:\\
\;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -\left(a \cdot c\right) \cdot 4\right)}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r92312 = b;
double r92313 = -r92312;
double r92314 = r92312 * r92312;
double r92315 = 4.0;
double r92316 = a;
double r92317 = c;
double r92318 = r92316 * r92317;
double r92319 = r92315 * r92318;
double r92320 = r92314 - r92319;
double r92321 = sqrt(r92320);
double r92322 = r92313 - r92321;
double r92323 = 2.0;
double r92324 = r92323 * r92316;
double r92325 = r92322 / r92324;
return r92325;
}
double f(double a, double b, double c) {
double r92326 = b;
double r92327 = -1.0759531795364344e-63;
bool r92328 = r92326 <= r92327;
double r92329 = -1.0;
double r92330 = c;
double r92331 = r92330 / r92326;
double r92332 = r92329 * r92331;
double r92333 = 2000198799923726.5;
bool r92334 = r92326 <= r92333;
double r92335 = -r92326;
double r92336 = a;
double r92337 = r92336 * r92330;
double r92338 = 4.0;
double r92339 = r92337 * r92338;
double r92340 = -r92339;
double r92341 = fma(r92326, r92326, r92340);
double r92342 = sqrt(r92341);
double r92343 = r92335 - r92342;
double r92344 = 2.0;
double r92345 = r92343 / r92344;
double r92346 = r92345 / r92336;
double r92347 = 1.0;
double r92348 = r92326 / r92336;
double r92349 = r92331 - r92348;
double r92350 = r92347 * r92349;
double r92351 = r92334 ? r92346 : r92350;
double r92352 = r92328 ? r92332 : r92351;
return r92352;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.3 |
|---|---|
| Target | 20.9 |
| Herbie | 10.4 |
if b < -1.0759531795364344e-63Initial program 54.4
rmApplied div-inv54.4
rmApplied pow154.4
Applied pow154.4
Applied pow-prod-down54.4
Simplified54.4
Taylor expanded around -inf 8.0
if -1.0759531795364344e-63 < b < 2000198799923726.5Initial program 14.9
rmApplied div-inv15.0
rmApplied pow115.0
Applied pow115.0
Applied pow-prod-down15.0
Simplified14.9
if 2000198799923726.5 < b Initial program 34.0
Taylor expanded around inf 6.8
Simplified6.8
Final simplification10.4
herbie shell --seed 2019208 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))