\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 -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 6.485606601696406255086078549712143397431 \cdot 10^{-71}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r75233 = b;
double r75234 = -r75233;
double r75235 = r75233 * r75233;
double r75236 = 4.0;
double r75237 = a;
double r75238 = c;
double r75239 = r75237 * r75238;
double r75240 = r75236 * r75239;
double r75241 = r75235 - r75240;
double r75242 = sqrt(r75241);
double r75243 = r75234 + r75242;
double r75244 = 2.0;
double r75245 = r75244 * r75237;
double r75246 = r75243 / r75245;
return r75246;
}
double f(double a, double b, double c) {
double r75247 = b;
double r75248 = -1.2447742914077108e+109;
bool r75249 = r75247 <= r75248;
double r75250 = 1.0;
double r75251 = c;
double r75252 = r75251 / r75247;
double r75253 = a;
double r75254 = r75247 / r75253;
double r75255 = r75252 - r75254;
double r75256 = r75250 * r75255;
double r75257 = 6.485606601696406e-71;
bool r75258 = r75247 <= r75257;
double r75259 = -r75247;
double r75260 = r75247 * r75247;
double r75261 = 4.0;
double r75262 = r75253 * r75251;
double r75263 = r75261 * r75262;
double r75264 = r75260 - r75263;
double r75265 = sqrt(r75264);
double r75266 = r75259 + r75265;
double r75267 = 1.0;
double r75268 = 2.0;
double r75269 = r75268 * r75253;
double r75270 = r75267 / r75269;
double r75271 = r75266 * r75270;
double r75272 = -1.0;
double r75273 = r75272 * r75252;
double r75274 = r75258 ? r75271 : r75273;
double r75275 = r75249 ? r75256 : r75274;
return r75275;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.7 |
|---|---|
| Target | 21.5 |
| Herbie | 10.1 |
if b < -1.2447742914077108e+109Initial program 49.3
Taylor expanded around -inf 4.0
Simplified4.0
if -1.2447742914077108e+109 < b < 6.485606601696406e-71Initial program 13.5
rmApplied div-inv13.6
if 6.485606601696406e-71 < b Initial program 53.3
Taylor expanded around inf 8.4
Final simplification10.1
herbie shell --seed 2019353
(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)))