\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 -2.3202538172935113 \cdot 10^{68}:\\
\;\;\;\;\frac{1}{2} \cdot \left(2 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\right)\\
\mathbf{elif}\;b \le -1.5018009284516093 \cdot 10^{-154}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{elif}\;b \le 5.0268171554574348 \cdot 10^{125}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot 4\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{c}{b}\right)\\
\end{array}double f(double a, double b, double c) {
double r89841 = b;
double r89842 = -r89841;
double r89843 = r89841 * r89841;
double r89844 = 4.0;
double r89845 = a;
double r89846 = r89844 * r89845;
double r89847 = c;
double r89848 = r89846 * r89847;
double r89849 = r89843 - r89848;
double r89850 = sqrt(r89849);
double r89851 = r89842 + r89850;
double r89852 = 2.0;
double r89853 = r89852 * r89845;
double r89854 = r89851 / r89853;
return r89854;
}
double f(double a, double b, double c) {
double r89855 = b;
double r89856 = -2.3202538172935113e+68;
bool r89857 = r89855 <= r89856;
double r89858 = 1.0;
double r89859 = 2.0;
double r89860 = r89858 / r89859;
double r89861 = c;
double r89862 = r89861 / r89855;
double r89863 = a;
double r89864 = r89855 / r89863;
double r89865 = r89862 - r89864;
double r89866 = r89859 * r89865;
double r89867 = r89860 * r89866;
double r89868 = -1.5018009284516093e-154;
bool r89869 = r89855 <= r89868;
double r89870 = -r89855;
double r89871 = r89855 * r89855;
double r89872 = 4.0;
double r89873 = r89872 * r89863;
double r89874 = r89873 * r89861;
double r89875 = r89871 - r89874;
double r89876 = sqrt(r89875);
double r89877 = r89870 + r89876;
double r89878 = r89859 * r89863;
double r89879 = r89858 / r89878;
double r89880 = r89877 * r89879;
double r89881 = 5.026817155457435e+125;
bool r89882 = r89855 <= r89881;
double r89883 = r89870 - r89876;
double r89884 = r89861 / r89883;
double r89885 = r89884 * r89872;
double r89886 = r89860 * r89885;
double r89887 = -2.0;
double r89888 = r89887 * r89862;
double r89889 = r89860 * r89888;
double r89890 = r89882 ? r89886 : r89889;
double r89891 = r89869 ? r89880 : r89890;
double r89892 = r89857 ? r89867 : r89891;
return r89892;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.7 |
|---|---|
| Target | 20.9 |
| Herbie | 6.9 |
if b < -2.3202538172935113e+68Initial program 40.7
rmApplied flip-+61.9
Simplified61.1
rmApplied *-un-lft-identity61.1
Applied *-un-lft-identity61.1
Applied times-frac61.1
Applied times-frac61.1
Simplified61.1
Simplified61.9
rmApplied clear-num61.9
Simplified60.9
Taylor expanded around -inf 5.2
Simplified5.2
if -2.3202538172935113e+68 < b < -1.5018009284516093e-154Initial program 6.4
rmApplied div-inv6.5
if -1.5018009284516093e-154 < b < 5.026817155457435e+125Initial program 29.6
rmApplied flip-+29.9
Simplified16.7
rmApplied *-un-lft-identity16.7
Applied *-un-lft-identity16.7
Applied times-frac16.7
Applied times-frac16.7
Simplified16.7
Simplified21.4
rmApplied clear-num21.6
Simplified10.7
rmApplied div-inv10.7
Applied add-cube-cbrt10.7
Applied times-frac10.7
Simplified10.4
Simplified10.4
if 5.026817155457435e+125 < b Initial program 61.6
rmApplied flip-+61.6
Simplified32.7
rmApplied *-un-lft-identity32.7
Applied *-un-lft-identity32.7
Applied times-frac32.7
Applied times-frac32.7
Simplified32.7
Simplified32.6
rmApplied clear-num32.7
Simplified31.4
Taylor expanded around inf 1.7
Final simplification6.9
herbie shell --seed 2020083
(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)))