\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.850740894150185 \cdot 10^{20}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -6.1806208921043762 \cdot 10^{-95}:\\
\;\;\;\;\frac{\frac{1}{2} \cdot \left(\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)\right)}{a} \cdot \frac{1}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le -2.125553485370055 \cdot 10^{-113}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 6.29361288009581358 \cdot 10^{112}:\\
\;\;\;\;\frac{1}{2 \cdot a} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r104865 = b;
double r104866 = -r104865;
double r104867 = r104865 * r104865;
double r104868 = 4.0;
double r104869 = a;
double r104870 = c;
double r104871 = r104869 * r104870;
double r104872 = r104868 * r104871;
double r104873 = r104867 - r104872;
double r104874 = sqrt(r104873);
double r104875 = r104866 - r104874;
double r104876 = 2.0;
double r104877 = r104876 * r104869;
double r104878 = r104875 / r104877;
return r104878;
}
double f(double a, double b, double c) {
double r104879 = b;
double r104880 = -1.8507408941501855e+20;
bool r104881 = r104879 <= r104880;
double r104882 = -1.0;
double r104883 = c;
double r104884 = r104883 / r104879;
double r104885 = r104882 * r104884;
double r104886 = -6.180620892104376e-95;
bool r104887 = r104879 <= r104886;
double r104888 = 1.0;
double r104889 = 2.0;
double r104890 = r104888 / r104889;
double r104891 = 2.0;
double r104892 = pow(r104879, r104891);
double r104893 = r104892 - r104892;
double r104894 = 4.0;
double r104895 = a;
double r104896 = r104895 * r104883;
double r104897 = r104894 * r104896;
double r104898 = r104893 + r104897;
double r104899 = r104890 * r104898;
double r104900 = r104899 / r104895;
double r104901 = -r104879;
double r104902 = r104879 * r104879;
double r104903 = r104902 - r104897;
double r104904 = sqrt(r104903);
double r104905 = r104901 + r104904;
double r104906 = r104888 / r104905;
double r104907 = r104900 * r104906;
double r104908 = -2.125553485370055e-113;
bool r104909 = r104879 <= r104908;
double r104910 = 6.293612880095814e+112;
bool r104911 = r104879 <= r104910;
double r104912 = r104889 * r104895;
double r104913 = r104888 / r104912;
double r104914 = r104901 - r104904;
double r104915 = r104913 * r104914;
double r104916 = r104879 / r104895;
double r104917 = r104882 * r104916;
double r104918 = r104911 ? r104915 : r104917;
double r104919 = r104909 ? r104885 : r104918;
double r104920 = r104887 ? r104907 : r104919;
double r104921 = r104881 ? r104885 : r104920;
return r104921;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.2 |
| Herbie | 9.2 |
if b < -1.8507408941501855e+20 or -6.180620892104376e-95 < b < -2.125553485370055e-113Initial program 54.9
Taylor expanded around -inf 6.3
if -1.8507408941501855e+20 < b < -6.180620892104376e-95Initial program 39.1
rmApplied clear-num39.1
rmApplied flip--39.1
Applied associate-/r/39.2
Applied add-cube-cbrt39.2
Applied times-frac39.2
Simplified14.4
Simplified14.4
if -2.125553485370055e-113 < b < 6.293612880095814e+112Initial program 12.2
rmApplied clear-num12.3
rmApplied div-inv12.4
Applied add-cube-cbrt12.4
Applied times-frac12.4
Simplified12.4
Simplified12.3
if 6.293612880095814e+112 < b Initial program 49.8
rmApplied clear-num49.8
Taylor expanded around 0 2.9
Final simplification9.2
herbie shell --seed 2020064
(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)))