\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.6260438117910197 \cdot 10^{21}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -1.16764411094466422 \cdot 10^{-83}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\frac{4 \cdot \left(a \cdot c\right)}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)} - b}}{a}\\
\mathbf{elif}\;b \le -5.52775192595066085 \cdot 10^{-141}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.3356876929369832 \cdot 10^{53}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}}{a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r72816 = b;
double r72817 = -r72816;
double r72818 = r72816 * r72816;
double r72819 = 4.0;
double r72820 = a;
double r72821 = c;
double r72822 = r72820 * r72821;
double r72823 = r72819 * r72822;
double r72824 = r72818 - r72823;
double r72825 = sqrt(r72824);
double r72826 = r72817 - r72825;
double r72827 = 2.0;
double r72828 = r72827 * r72820;
double r72829 = r72826 / r72828;
return r72829;
}
double f(double a, double b, double c) {
double r72830 = b;
double r72831 = -1.6260438117910197e+21;
bool r72832 = r72830 <= r72831;
double r72833 = -1.0;
double r72834 = c;
double r72835 = r72834 / r72830;
double r72836 = r72833 * r72835;
double r72837 = -1.1676441109446642e-83;
bool r72838 = r72830 <= r72837;
double r72839 = 1.0;
double r72840 = 2.0;
double r72841 = r72839 / r72840;
double r72842 = 4.0;
double r72843 = a;
double r72844 = r72843 * r72834;
double r72845 = r72842 * r72844;
double r72846 = -r72845;
double r72847 = fma(r72830, r72830, r72846);
double r72848 = sqrt(r72847);
double r72849 = r72848 - r72830;
double r72850 = r72845 / r72849;
double r72851 = r72850 / r72843;
double r72852 = r72841 * r72851;
double r72853 = -5.527751925950661e-141;
bool r72854 = r72830 <= r72853;
double r72855 = 3.3356876929369832e+53;
bool r72856 = r72830 <= r72855;
double r72857 = -r72830;
double r72858 = r72857 - r72848;
double r72859 = r72858 / r72843;
double r72860 = r72841 * r72859;
double r72861 = r72830 / r72843;
double r72862 = r72833 * r72861;
double r72863 = r72856 ? r72860 : r72862;
double r72864 = r72854 ? r72836 : r72863;
double r72865 = r72838 ? r72852 : r72864;
double r72866 = r72832 ? r72836 : r72865;
return r72866;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.5 |
|---|---|
| Target | 20.8 |
| Herbie | 10.1 |
if b < -1.6260438117910197e+21 or -1.1676441109446642e-83 < b < -5.527751925950661e-141Initial program 52.7
Taylor expanded around -inf 9.4
if -1.6260438117910197e+21 < b < -1.1676441109446642e-83Initial program 39.4
rmApplied clear-num39.4
rmApplied *-un-lft-identity39.4
Applied times-frac39.4
Applied add-cube-cbrt39.4
Applied times-frac39.4
Simplified39.4
Simplified39.4
rmApplied flip--39.4
Simplified16.7
Simplified16.7
if -5.527751925950661e-141 < b < 3.3356876929369832e+53Initial program 12.0
rmApplied clear-num12.1
rmApplied *-un-lft-identity12.1
Applied times-frac12.0
Applied add-cube-cbrt12.0
Applied times-frac12.0
Simplified12.0
Simplified11.9
if 3.3356876929369832e+53 < b Initial program 38.5
rmApplied clear-num38.6
Taylor expanded around 0 5.3
Final simplification10.1
herbie shell --seed 2020043 +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)))