\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 -9.139254247068609 \cdot 10^{+140}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 9.632148973470483 \cdot 10^{-296}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\sqrt{(-4 \cdot \left(c \cdot a\right) + \left(b \cdot b\right))_*} - b}{a}\\
\mathbf{elif}\;b \le 6.523631550102089 \cdot 10^{+89}:\\
\;\;\;\;\frac{\frac{-c}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}}{\frac{-1}{2}}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r24045566 = b;
double r24045567 = -r24045566;
double r24045568 = r24045566 * r24045566;
double r24045569 = 4.0;
double r24045570 = a;
double r24045571 = r24045569 * r24045570;
double r24045572 = c;
double r24045573 = r24045571 * r24045572;
double r24045574 = r24045568 - r24045573;
double r24045575 = sqrt(r24045574);
double r24045576 = r24045567 + r24045575;
double r24045577 = 2.0;
double r24045578 = r24045577 * r24045570;
double r24045579 = r24045576 / r24045578;
return r24045579;
}
double f(double a, double b, double c) {
double r24045580 = b;
double r24045581 = -9.139254247068609e+140;
bool r24045582 = r24045580 <= r24045581;
double r24045583 = c;
double r24045584 = r24045583 / r24045580;
double r24045585 = a;
double r24045586 = r24045580 / r24045585;
double r24045587 = r24045584 - r24045586;
double r24045588 = 9.632148973470483e-296;
bool r24045589 = r24045580 <= r24045588;
double r24045590 = 0.5;
double r24045591 = -4.0;
double r24045592 = r24045583 * r24045585;
double r24045593 = r24045580 * r24045580;
double r24045594 = fma(r24045591, r24045592, r24045593);
double r24045595 = sqrt(r24045594);
double r24045596 = r24045595 - r24045580;
double r24045597 = r24045596 / r24045585;
double r24045598 = r24045590 * r24045597;
double r24045599 = 6.523631550102089e+89;
bool r24045600 = r24045580 <= r24045599;
double r24045601 = -r24045583;
double r24045602 = -r24045580;
double r24045603 = r24045585 * r24045591;
double r24045604 = fma(r24045603, r24045583, r24045593);
double r24045605 = sqrt(r24045604);
double r24045606 = r24045602 - r24045605;
double r24045607 = r24045601 / r24045606;
double r24045608 = -0.5;
double r24045609 = r24045607 / r24045608;
double r24045610 = -r24045584;
double r24045611 = r24045600 ? r24045609 : r24045610;
double r24045612 = r24045589 ? r24045598 : r24045611;
double r24045613 = r24045582 ? r24045587 : r24045612;
return r24045613;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.0 |
|---|---|
| Target | 20.1 |
| Herbie | 6.6 |
if b < -9.139254247068609e+140Initial program 55.8
Taylor expanded around -inf 1.6
if -9.139254247068609e+140 < b < 9.632148973470483e-296Initial program 8.7
rmApplied *-un-lft-identity8.7
Applied associate-/l*8.9
rmApplied *-un-lft-identity8.9
Applied *-un-lft-identity8.9
Applied distribute-lft-out8.9
Applied times-frac8.9
Applied add-sqr-sqrt8.9
Applied times-frac8.9
Simplified8.9
Simplified8.7
if 9.632148973470483e-296 < b < 6.523631550102089e+89Initial program 32.6
rmApplied *-un-lft-identity32.6
Applied associate-/l*32.7
rmApplied flip-+32.7
Applied associate-/r/32.8
Applied *-un-lft-identity32.8
Applied times-frac32.8
Simplified16.4
Simplified16.4
rmApplied distribute-frac-neg16.4
Applied distribute-lft-neg-out16.4
Simplified9.3
if 6.523631550102089e+89 < b Initial program 58.7
Taylor expanded around inf 2.6
Simplified2.6
Final simplification6.6
herbie shell --seed 2019112 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 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)))