\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 -3.860355455153336511492756422997945623034 \cdot 10^{55}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -3.525283965541116465664395093099544846334 \cdot 10^{-144}:\\
\;\;\;\;\frac{\frac{4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.368471338029900067384853691743532212305 \cdot 10^{94}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r49891 = b;
double r49892 = -r49891;
double r49893 = r49891 * r49891;
double r49894 = 4.0;
double r49895 = a;
double r49896 = c;
double r49897 = r49895 * r49896;
double r49898 = r49894 * r49897;
double r49899 = r49893 - r49898;
double r49900 = sqrt(r49899);
double r49901 = r49892 - r49900;
double r49902 = 2.0;
double r49903 = r49902 * r49895;
double r49904 = r49901 / r49903;
return r49904;
}
double f(double a, double b, double c) {
double r49905 = b;
double r49906 = -3.8603554551533365e+55;
bool r49907 = r49905 <= r49906;
double r49908 = -1.0;
double r49909 = c;
double r49910 = r49909 / r49905;
double r49911 = r49908 * r49910;
double r49912 = -3.5252839655411165e-144;
bool r49913 = r49905 <= r49912;
double r49914 = 4.0;
double r49915 = a;
double r49916 = r49915 * r49909;
double r49917 = r49914 * r49916;
double r49918 = r49905 * r49905;
double r49919 = r49918 - r49917;
double r49920 = sqrt(r49919);
double r49921 = r49920 - r49905;
double r49922 = r49917 / r49921;
double r49923 = 2.0;
double r49924 = r49923 * r49915;
double r49925 = r49922 / r49924;
double r49926 = 2.3684713380299e+94;
bool r49927 = r49905 <= r49926;
double r49928 = -r49905;
double r49929 = r49928 / r49924;
double r49930 = r49920 / r49924;
double r49931 = r49929 - r49930;
double r49932 = 1.0;
double r49933 = r49905 / r49915;
double r49934 = r49910 - r49933;
double r49935 = r49932 * r49934;
double r49936 = r49927 ? r49931 : r49935;
double r49937 = r49913 ? r49925 : r49936;
double r49938 = r49907 ? r49911 : r49937;
return r49938;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 21.0 |
| Herbie | 8.8 |
if b < -3.8603554551533365e+55Initial program 57.7
Taylor expanded around -inf 3.8
if -3.8603554551533365e+55 < b < -3.5252839655411165e-144Initial program 36.9
rmApplied add-sqr-sqrt36.9
Applied sqrt-prod37.7
rmApplied flip--37.7
Simplified17.4
Simplified17.3
if -3.5252839655411165e-144 < b < 2.3684713380299e+94Initial program 11.1
rmApplied div-sub11.1
if 2.3684713380299e+94 < b Initial program 44.8
Taylor expanded around inf 3.8
Simplified3.8
Final simplification8.8
herbie shell --seed 2019346
(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)))