\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 -5.2389466313579672 \cdot 10^{127}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.6670468245058271 \cdot 10^{-85}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r85084 = b;
double r85085 = -r85084;
double r85086 = r85084 * r85084;
double r85087 = 4.0;
double r85088 = a;
double r85089 = r85087 * r85088;
double r85090 = c;
double r85091 = r85089 * r85090;
double r85092 = r85086 - r85091;
double r85093 = sqrt(r85092);
double r85094 = r85085 + r85093;
double r85095 = 2.0;
double r85096 = r85095 * r85088;
double r85097 = r85094 / r85096;
return r85097;
}
double f(double a, double b, double c) {
double r85098 = b;
double r85099 = -5.238946631357967e+127;
bool r85100 = r85098 <= r85099;
double r85101 = 1.0;
double r85102 = c;
double r85103 = r85102 / r85098;
double r85104 = a;
double r85105 = r85098 / r85104;
double r85106 = r85103 - r85105;
double r85107 = r85101 * r85106;
double r85108 = 1.667046824505827e-85;
bool r85109 = r85098 <= r85108;
double r85110 = 1.0;
double r85111 = 2.0;
double r85112 = r85111 * r85104;
double r85113 = -r85098;
double r85114 = r85098 * r85098;
double r85115 = 4.0;
double r85116 = r85115 * r85104;
double r85117 = r85116 * r85102;
double r85118 = r85114 - r85117;
double r85119 = sqrt(r85118);
double r85120 = r85113 + r85119;
double r85121 = r85112 / r85120;
double r85122 = r85110 / r85121;
double r85123 = -1.0;
double r85124 = r85123 * r85103;
double r85125 = r85109 ? r85122 : r85124;
double r85126 = r85100 ? r85107 : r85125;
return r85126;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.6 |
| Herbie | 10.0 |
if b < -5.238946631357967e+127Initial program 54.2
Taylor expanded around -inf 3.3
Simplified3.3
if -5.238946631357967e+127 < b < 1.667046824505827e-85Initial program 12.2
rmApplied clear-num12.3
if 1.667046824505827e-85 < b Initial program 52.8
Taylor expanded around inf 9.7
Final simplification10.0
herbie shell --seed 2020056
(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)))