\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.223763057046510327568967152287533282505 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.351742539702864616278805005197483152899 \cdot 10^{-186}:\\
\;\;\;\;\frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{\frac{2 \cdot a}{\sqrt{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}\\
\mathbf{elif}\;b \le 1.458057835821772074616178333218437979276 \cdot 10^{144}:\\
\;\;\;\;\frac{\frac{1}{\frac{2}{4}} \cdot c}{\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 r93271 = b;
double r93272 = -r93271;
double r93273 = r93271 * r93271;
double r93274 = 4.0;
double r93275 = a;
double r93276 = c;
double r93277 = r93275 * r93276;
double r93278 = r93274 * r93277;
double r93279 = r93273 - r93278;
double r93280 = sqrt(r93279);
double r93281 = r93272 + r93280;
double r93282 = 2.0;
double r93283 = r93282 * r93275;
double r93284 = r93281 / r93283;
return r93284;
}
double f(double a, double b, double c) {
double r93285 = b;
double r93286 = -2.2237630570465103e+109;
bool r93287 = r93285 <= r93286;
double r93288 = 1.0;
double r93289 = c;
double r93290 = r93289 / r93285;
double r93291 = a;
double r93292 = r93285 / r93291;
double r93293 = r93290 - r93292;
double r93294 = r93288 * r93293;
double r93295 = -2.3517425397028646e-186;
bool r93296 = r93285 <= r93295;
double r93297 = -r93285;
double r93298 = r93285 * r93285;
double r93299 = 4.0;
double r93300 = r93291 * r93289;
double r93301 = r93299 * r93300;
double r93302 = r93298 - r93301;
double r93303 = sqrt(r93302);
double r93304 = r93297 + r93303;
double r93305 = sqrt(r93304);
double r93306 = 2.0;
double r93307 = r93306 * r93291;
double r93308 = r93307 / r93305;
double r93309 = r93305 / r93308;
double r93310 = 1.458057835821772e+144;
bool r93311 = r93285 <= r93310;
double r93312 = 1.0;
double r93313 = r93306 / r93299;
double r93314 = r93312 / r93313;
double r93315 = r93314 * r93289;
double r93316 = r93297 - r93303;
double r93317 = r93315 / r93316;
double r93318 = -1.0;
double r93319 = r93318 * r93290;
double r93320 = r93311 ? r93317 : r93319;
double r93321 = r93296 ? r93309 : r93320;
double r93322 = r93287 ? r93294 : r93321;
return r93322;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 6.7 |
if b < -2.2237630570465103e+109Initial program 48.6
Taylor expanded around -inf 3.3
Simplified3.3
if -2.2237630570465103e+109 < b < -2.3517425397028646e-186Initial program 6.9
rmApplied add-sqr-sqrt7.3
Applied associate-/l*7.3
if -2.3517425397028646e-186 < b < 1.458057835821772e+144Initial program 31.3
rmApplied flip-+31.5
Simplified16.1
rmApplied clear-num16.3
Simplified15.3
rmApplied times-frac15.3
Simplified10.2
rmApplied associate-/r*9.9
Simplified9.8
if 1.458057835821772e+144 < b Initial program 62.9
Taylor expanded around inf 1.5
Final simplification6.7
herbie shell --seed 2020001 +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)))