\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.3732770006881601 \cdot 10^{-89}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 9.18109192604693914 \cdot 10^{128}:\\
\;\;\;\;\frac{\left(-b\right) - \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 r80181 = b;
double r80182 = -r80181;
double r80183 = r80181 * r80181;
double r80184 = 4.0;
double r80185 = a;
double r80186 = c;
double r80187 = r80185 * r80186;
double r80188 = r80184 * r80187;
double r80189 = r80183 - r80188;
double r80190 = sqrt(r80189);
double r80191 = r80182 - r80190;
double r80192 = 2.0;
double r80193 = r80192 * r80185;
double r80194 = r80191 / r80193;
return r80194;
}
double f(double a, double b, double c) {
double r80195 = b;
double r80196 = -2.37327700068816e-89;
bool r80197 = r80195 <= r80196;
double r80198 = -1.0;
double r80199 = c;
double r80200 = r80199 / r80195;
double r80201 = r80198 * r80200;
double r80202 = 9.181091926046939e+128;
bool r80203 = r80195 <= r80202;
double r80204 = -r80195;
double r80205 = r80195 * r80195;
double r80206 = 4.0;
double r80207 = a;
double r80208 = r80207 * r80199;
double r80209 = r80206 * r80208;
double r80210 = r80205 - r80209;
double r80211 = sqrt(r80210);
double r80212 = r80204 - r80211;
double r80213 = 2.0;
double r80214 = r80213 * r80207;
double r80215 = r80212 / r80214;
double r80216 = 1.0;
double r80217 = r80195 / r80207;
double r80218 = r80200 - r80217;
double r80219 = r80216 * r80218;
double r80220 = r80203 ? r80215 : r80219;
double r80221 = r80197 ? r80201 : r80220;
return r80221;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.8 |
|---|---|
| Target | 21.2 |
| Herbie | 10.3 |
if b < -2.37327700068816e-89Initial program 52.5
Taylor expanded around -inf 10.0
if -2.37327700068816e-89 < b < 9.181091926046939e+128Initial program 12.7
rmApplied div-inv12.9
rmApplied un-div-inv12.7
if 9.181091926046939e+128 < b Initial program 55.7
Taylor expanded around inf 3.0
Simplified3.0
Final simplification10.3
herbie shell --seed 2020033 +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)))