\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.361733299857302083043096878302889042354 \cdot 10^{105}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 3.09136118080059703772253670927164991568 \cdot 10^{-86}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r97074 = b;
double r97075 = -r97074;
double r97076 = r97074 * r97074;
double r97077 = 4.0;
double r97078 = a;
double r97079 = r97077 * r97078;
double r97080 = c;
double r97081 = r97079 * r97080;
double r97082 = r97076 - r97081;
double r97083 = sqrt(r97082);
double r97084 = r97075 + r97083;
double r97085 = 2.0;
double r97086 = r97085 * r97078;
double r97087 = r97084 / r97086;
return r97087;
}
double f(double a, double b, double c) {
double r97088 = b;
double r97089 = -1.361733299857302e+105;
bool r97090 = r97088 <= r97089;
double r97091 = 1.0;
double r97092 = c;
double r97093 = r97092 / r97088;
double r97094 = a;
double r97095 = r97088 / r97094;
double r97096 = r97093 - r97095;
double r97097 = r97091 * r97096;
double r97098 = 3.091361180800597e-86;
bool r97099 = r97088 <= r97098;
double r97100 = 1.0;
double r97101 = 2.0;
double r97102 = r97101 * r97094;
double r97103 = r97088 * r97088;
double r97104 = 4.0;
double r97105 = r97104 * r97094;
double r97106 = r97105 * r97092;
double r97107 = r97103 - r97106;
double r97108 = sqrt(r97107);
double r97109 = r97108 - r97088;
double r97110 = r97102 / r97109;
double r97111 = r97100 / r97110;
double r97112 = -1.0;
double r97113 = r97112 * r97093;
double r97114 = r97099 ? r97111 : r97113;
double r97115 = r97090 ? r97097 : r97114;
return r97115;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 21.1 |
| Herbie | 10.3 |
if b < -1.361733299857302e+105Initial program 48.6
Simplified48.6
Taylor expanded around -inf 3.6
Simplified3.6
if -1.361733299857302e+105 < b < 3.091361180800597e-86Initial program 12.2
Simplified12.2
rmApplied clear-num12.3
if 3.091361180800597e-86 < b Initial program 51.8
Simplified51.8
Taylor expanded around inf 10.7
Final simplification10.3
herbie shell --seed 2019322 +o rules:numerics
(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)))