\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 -6.6114837319571935 \cdot 10^{38}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 2.8340580980410285 \cdot 10^{-68}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r100209 = b;
double r100210 = -r100209;
double r100211 = r100209 * r100209;
double r100212 = 4.0;
double r100213 = a;
double r100214 = c;
double r100215 = r100213 * r100214;
double r100216 = r100212 * r100215;
double r100217 = r100211 - r100216;
double r100218 = sqrt(r100217);
double r100219 = r100210 + r100218;
double r100220 = 2.0;
double r100221 = r100220 * r100213;
double r100222 = r100219 / r100221;
return r100222;
}
double f(double a, double b, double c) {
double r100223 = b;
double r100224 = -6.6114837319571935e+38;
bool r100225 = r100223 <= r100224;
double r100226 = 1.0;
double r100227 = c;
double r100228 = r100227 / r100223;
double r100229 = a;
double r100230 = r100223 / r100229;
double r100231 = r100228 - r100230;
double r100232 = r100226 * r100231;
double r100233 = 2.8340580980410285e-68;
bool r100234 = r100223 <= r100233;
double r100235 = 1.0;
double r100236 = 2.0;
double r100237 = r100236 * r100229;
double r100238 = -r100223;
double r100239 = r100223 * r100223;
double r100240 = 4.0;
double r100241 = r100229 * r100227;
double r100242 = r100240 * r100241;
double r100243 = r100239 - r100242;
double r100244 = sqrt(r100243);
double r100245 = r100238 + r100244;
double r100246 = r100237 / r100245;
double r100247 = r100235 / r100246;
double r100248 = -1.0;
double r100249 = r100248 * r100228;
double r100250 = r100234 ? r100247 : r100249;
double r100251 = r100225 ? r100232 : r100250;
return r100251;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.8 |
|---|---|
| Target | 21.2 |
| Herbie | 10.6 |
if b < -6.6114837319571935e+38Initial program 36.8
Taylor expanded around -inf 6.6
Simplified6.6
if -6.6114837319571935e+38 < b < 2.8340580980410285e-68Initial program 15.0
rmApplied clear-num15.1
if 2.8340580980410285e-68 < b Initial program 54.0
Taylor expanded around inf 8.2
Final simplification10.6
herbie shell --seed 2020039 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))