\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 -7.363255598823911 \cdot 10^{-15}:\\
\;\;\;\;\frac{-c}{b}\\
\mathbf{elif}\;b \le -6.936587154412951 \cdot 10^{-28}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{1}{2 \cdot a} \cdot \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}\\
\mathbf{elif}\;b \le -2.3344326820285623 \cdot 10^{-123}:\\
\;\;\;\;\frac{-c}{b}\\
\mathbf{elif}\;b \le 1.6691257204922504 \cdot 10^{+85}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r3257822 = b;
double r3257823 = -r3257822;
double r3257824 = r3257822 * r3257822;
double r3257825 = 4.0;
double r3257826 = a;
double r3257827 = c;
double r3257828 = r3257826 * r3257827;
double r3257829 = r3257825 * r3257828;
double r3257830 = r3257824 - r3257829;
double r3257831 = sqrt(r3257830);
double r3257832 = r3257823 - r3257831;
double r3257833 = 2.0;
double r3257834 = r3257833 * r3257826;
double r3257835 = r3257832 / r3257834;
return r3257835;
}
double f(double a, double b, double c) {
double r3257836 = b;
double r3257837 = -7.363255598823911e-15;
bool r3257838 = r3257836 <= r3257837;
double r3257839 = c;
double r3257840 = -r3257839;
double r3257841 = r3257840 / r3257836;
double r3257842 = -6.936587154412951e-28;
bool r3257843 = r3257836 <= r3257842;
double r3257844 = -r3257836;
double r3257845 = 2.0;
double r3257846 = a;
double r3257847 = r3257845 * r3257846;
double r3257848 = r3257844 / r3257847;
double r3257849 = 1.0;
double r3257850 = r3257849 / r3257847;
double r3257851 = r3257836 * r3257836;
double r3257852 = r3257846 * r3257839;
double r3257853 = 4.0;
double r3257854 = r3257852 * r3257853;
double r3257855 = r3257851 - r3257854;
double r3257856 = sqrt(r3257855);
double r3257857 = r3257850 * r3257856;
double r3257858 = r3257848 - r3257857;
double r3257859 = -2.3344326820285623e-123;
bool r3257860 = r3257836 <= r3257859;
double r3257861 = 1.6691257204922504e+85;
bool r3257862 = r3257836 <= r3257861;
double r3257863 = r3257847 / r3257856;
double r3257864 = r3257849 / r3257863;
double r3257865 = r3257848 - r3257864;
double r3257866 = r3257839 / r3257836;
double r3257867 = r3257836 / r3257846;
double r3257868 = r3257866 - r3257867;
double r3257869 = r3257862 ? r3257865 : r3257868;
double r3257870 = r3257860 ? r3257841 : r3257869;
double r3257871 = r3257843 ? r3257858 : r3257870;
double r3257872 = r3257838 ? r3257841 : r3257871;
return r3257872;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 21.0 |
| Herbie | 10.6 |
if b < -7.363255598823911e-15 or -6.936587154412951e-28 < b < -2.3344326820285623e-123Initial program 50.9
rmApplied div-sub51.4
Taylor expanded around -inf 10.6
Simplified10.6
if -7.363255598823911e-15 < b < -6.936587154412951e-28Initial program 35.8
rmApplied div-sub35.8
rmApplied div-inv35.9
if -2.3344326820285623e-123 < b < 1.6691257204922504e+85Initial program 12.6
rmApplied div-sub12.6
rmApplied clear-num12.7
if 1.6691257204922504e+85 < b Initial program 42.9
Taylor expanded around inf 3.7
Final simplification10.6
herbie shell --seed 2019163 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 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)))