\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 -2.644409376808577592769878215530106196344 \cdot 10^{-69}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.542951486580225494391623071663800816645 \cdot 10^{93}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r71811 = b;
double r71812 = -r71811;
double r71813 = r71811 * r71811;
double r71814 = 4.0;
double r71815 = a;
double r71816 = c;
double r71817 = r71815 * r71816;
double r71818 = r71814 * r71817;
double r71819 = r71813 - r71818;
double r71820 = sqrt(r71819);
double r71821 = r71812 - r71820;
double r71822 = 2.0;
double r71823 = r71822 * r71815;
double r71824 = r71821 / r71823;
return r71824;
}
double f(double a, double b, double c) {
double r71825 = b;
double r71826 = -2.6444093768085776e-69;
bool r71827 = r71825 <= r71826;
double r71828 = -1.0;
double r71829 = c;
double r71830 = r71829 / r71825;
double r71831 = r71828 * r71830;
double r71832 = 2.5429514865802255e+93;
bool r71833 = r71825 <= r71832;
double r71834 = 1.0;
double r71835 = 2.0;
double r71836 = r71834 / r71835;
double r71837 = -r71825;
double r71838 = r71825 * r71825;
double r71839 = 4.0;
double r71840 = a;
double r71841 = r71840 * r71829;
double r71842 = r71839 * r71841;
double r71843 = r71838 - r71842;
double r71844 = sqrt(r71843);
double r71845 = r71837 - r71844;
double r71846 = r71834 * r71845;
double r71847 = r71846 / r71840;
double r71848 = r71836 * r71847;
double r71849 = -2.0;
double r71850 = r71825 / r71840;
double r71851 = r71849 * r71850;
double r71852 = r71836 * r71851;
double r71853 = r71833 ? r71848 : r71852;
double r71854 = r71827 ? r71831 : r71853;
return r71854;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.8 |
| Herbie | 10.0 |
if b < -2.6444093768085776e-69Initial program 53.4
Taylor expanded around -inf 8.8
if -2.6444093768085776e-69 < b < 2.5429514865802255e+93Initial program 13.4
rmApplied *-un-lft-identity13.4
Applied times-frac13.4
rmApplied add-exp-log16.5
rmApplied *-un-lft-identity16.5
Applied *-un-lft-identity16.5
Applied distribute-lft-out--16.5
Simplified13.4
if 2.5429514865802255e+93 < b Initial program 45.2
rmApplied *-un-lft-identity45.2
Applied times-frac45.2
rmApplied clear-num45.3
Taylor expanded around 0 3.5
Final simplification10.0
herbie shell --seed 2019347 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))