\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.98276540088900058 \cdot 10^{134}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.1860189201379418 \cdot 10^{-161}:\\
\;\;\;\;\left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b\right) \cdot \frac{\frac{1}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r62014 = b;
double r62015 = -r62014;
double r62016 = r62014 * r62014;
double r62017 = 4.0;
double r62018 = a;
double r62019 = r62017 * r62018;
double r62020 = c;
double r62021 = r62019 * r62020;
double r62022 = r62016 - r62021;
double r62023 = sqrt(r62022);
double r62024 = r62015 + r62023;
double r62025 = 2.0;
double r62026 = r62025 * r62018;
double r62027 = r62024 / r62026;
return r62027;
}
double f(double a, double b, double c) {
double r62028 = b;
double r62029 = -1.9827654008890006e+134;
bool r62030 = r62028 <= r62029;
double r62031 = 1.0;
double r62032 = c;
double r62033 = r62032 / r62028;
double r62034 = a;
double r62035 = r62028 / r62034;
double r62036 = r62033 - r62035;
double r62037 = r62031 * r62036;
double r62038 = 1.1860189201379418e-161;
bool r62039 = r62028 <= r62038;
double r62040 = r62028 * r62028;
double r62041 = 4.0;
double r62042 = r62041 * r62034;
double r62043 = r62042 * r62032;
double r62044 = r62040 - r62043;
double r62045 = sqrt(r62044);
double r62046 = r62045 - r62028;
double r62047 = 1.0;
double r62048 = 2.0;
double r62049 = r62047 / r62048;
double r62050 = r62049 / r62034;
double r62051 = r62046 * r62050;
double r62052 = -1.0;
double r62053 = r62052 * r62033;
double r62054 = r62039 ? r62051 : r62053;
double r62055 = r62030 ? r62037 : r62054;
return r62055;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 21.0 |
| Herbie | 10.9 |
if b < -1.9827654008890006e+134Initial program 56.8
Simplified56.8
Taylor expanded around -inf 3.1
Simplified3.1
if -1.9827654008890006e+134 < b < 1.1860189201379418e-161Initial program 10.3
Simplified10.3
rmApplied *-un-lft-identity10.3
Applied div-inv10.3
Applied times-frac10.5
Simplified10.5
if 1.1860189201379418e-161 < b Initial program 49.7
Simplified49.7
Taylor expanded around inf 13.7
Final simplification10.9
herbie shell --seed 2020047
(FPCore (a b c)
:name "The quadratic formula (r1)"
: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)))