\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.683005404599734610349454603271447966358 \cdot 10^{80}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -6.982634002611897496887233296015886335875 \cdot 10^{-268}:\\
\;\;\;\;-\frac{\frac{c \cdot \left(4 \cdot a\right)}{b - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2098867031.934578418731689453125:\\
\;\;\;\;\frac{-\left(b + \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}\right)}{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 r107701 = b;
double r107702 = -r107701;
double r107703 = r107701 * r107701;
double r107704 = 4.0;
double r107705 = a;
double r107706 = c;
double r107707 = r107705 * r107706;
double r107708 = r107704 * r107707;
double r107709 = r107703 - r107708;
double r107710 = sqrt(r107709);
double r107711 = r107702 - r107710;
double r107712 = 2.0;
double r107713 = r107712 * r107705;
double r107714 = r107711 / r107713;
return r107714;
}
double f(double a, double b, double c) {
double r107715 = b;
double r107716 = -1.6830054045997346e+80;
bool r107717 = r107715 <= r107716;
double r107718 = -1.0;
double r107719 = c;
double r107720 = r107719 / r107715;
double r107721 = r107718 * r107720;
double r107722 = -6.982634002611897e-268;
bool r107723 = r107715 <= r107722;
double r107724 = 4.0;
double r107725 = a;
double r107726 = r107724 * r107725;
double r107727 = r107719 * r107726;
double r107728 = r107715 * r107715;
double r107729 = r107725 * r107719;
double r107730 = r107729 * r107724;
double r107731 = r107728 - r107730;
double r107732 = sqrt(r107731);
double r107733 = r107715 - r107732;
double r107734 = r107727 / r107733;
double r107735 = 2.0;
double r107736 = r107735 * r107725;
double r107737 = r107734 / r107736;
double r107738 = -r107737;
double r107739 = 2098867031.9345784;
bool r107740 = r107715 <= r107739;
double r107741 = r107715 + r107732;
double r107742 = -r107741;
double r107743 = r107742 / r107736;
double r107744 = 1.0;
double r107745 = r107715 / r107725;
double r107746 = r107720 - r107745;
double r107747 = r107744 * r107746;
double r107748 = r107740 ? r107743 : r107747;
double r107749 = r107723 ? r107738 : r107748;
double r107750 = r107717 ? r107721 : r107749;
return r107750;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 20.9 |
| Herbie | 9.9 |
if b < -1.6830054045997346e+80Initial program 58.0
Taylor expanded around -inf 2.8
if -1.6830054045997346e+80 < b < -6.982634002611897e-268Initial program 33.7
rmApplied div-inv33.8
rmApplied pow133.8
Applied pow133.8
Applied pow-prod-down33.8
Simplified33.7
rmApplied flip-+33.8
Simplified17.2
if -6.982634002611897e-268 < b < 2098867031.9345784Initial program 11.8
rmApplied div-inv11.9
rmApplied pow111.9
Applied pow111.9
Applied pow-prod-down11.9
Simplified11.8
if 2098867031.9345784 < b Initial program 32.3
Taylor expanded around inf 7.0
Simplified7.0
Final simplification9.9
herbie shell --seed 2019209 +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)))