\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 -73773484249037.312:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -8.143231117685541 \cdot 10^{-211}:\\
\;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\
\mathbf{elif}\;b \le 8.633216037833923 \cdot 10^{65}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r65647 = b;
double r65648 = -r65647;
double r65649 = r65647 * r65647;
double r65650 = 4.0;
double r65651 = a;
double r65652 = c;
double r65653 = r65651 * r65652;
double r65654 = r65650 * r65653;
double r65655 = r65649 - r65654;
double r65656 = sqrt(r65655);
double r65657 = r65648 - r65656;
double r65658 = 2.0;
double r65659 = r65658 * r65651;
double r65660 = r65657 / r65659;
return r65660;
}
double f(double a, double b, double c) {
double r65661 = b;
double r65662 = -73773484249037.31;
bool r65663 = r65661 <= r65662;
double r65664 = -1.0;
double r65665 = c;
double r65666 = r65665 / r65661;
double r65667 = r65664 * r65666;
double r65668 = -8.143231117685541e-211;
bool r65669 = r65661 <= r65668;
double r65670 = 2.0;
double r65671 = pow(r65661, r65670);
double r65672 = r65671 - r65671;
double r65673 = 4.0;
double r65674 = a;
double r65675 = r65674 * r65665;
double r65676 = r65673 * r65675;
double r65677 = r65672 + r65676;
double r65678 = r65661 * r65661;
double r65679 = r65678 - r65676;
double r65680 = sqrt(r65679);
double r65681 = r65680 - r65661;
double r65682 = r65677 / r65681;
double r65683 = 2.0;
double r65684 = r65683 * r65674;
double r65685 = r65682 / r65684;
double r65686 = 8.633216037833923e+65;
bool r65687 = r65661 <= r65686;
double r65688 = -r65661;
double r65689 = r65688 - r65680;
double r65690 = 1.0;
double r65691 = r65690 / r65684;
double r65692 = r65689 * r65691;
double r65693 = 1.0;
double r65694 = r65661 / r65674;
double r65695 = r65666 - r65694;
double r65696 = r65693 * r65695;
double r65697 = r65687 ? r65692 : r65696;
double r65698 = r65669 ? r65685 : r65697;
double r65699 = r65663 ? r65667 : r65698;
return r65699;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 21.0 |
| Herbie | 8.9 |
if b < -73773484249037.31Initial program 55.9
Taylor expanded around -inf 5.7
if -73773484249037.31 < b < -8.143231117685541e-211Initial program 29.4
rmApplied flip--29.4
Simplified16.8
Simplified16.8
if -8.143231117685541e-211 < b < 8.633216037833923e+65Initial program 10.2
rmApplied div-inv10.3
if 8.633216037833923e+65 < b Initial program 40.1
Taylor expanded around inf 4.7
Simplified4.7
Final simplification8.9
herbie shell --seed 2020057
(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)))