\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 -4.463381827278506 \cdot 10^{+97}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -2.7394104193355045 \cdot 10^{-295}:\\
\;\;\;\;\frac{1}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b} \cdot \left(2 \cdot c\right)\\
\mathbf{elif}\;b \le 4.0392005370549217 \cdot 10^{+149}:\\
\;\;\;\;\frac{1}{\frac{a \cdot 2}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r4236103 = b;
double r4236104 = -r4236103;
double r4236105 = r4236103 * r4236103;
double r4236106 = 4.0;
double r4236107 = a;
double r4236108 = c;
double r4236109 = r4236107 * r4236108;
double r4236110 = r4236106 * r4236109;
double r4236111 = r4236105 - r4236110;
double r4236112 = sqrt(r4236111);
double r4236113 = r4236104 - r4236112;
double r4236114 = 2.0;
double r4236115 = r4236114 * r4236107;
double r4236116 = r4236113 / r4236115;
return r4236116;
}
double f(double a, double b, double c) {
double r4236117 = b;
double r4236118 = -4.463381827278506e+97;
bool r4236119 = r4236117 <= r4236118;
double r4236120 = c;
double r4236121 = r4236120 / r4236117;
double r4236122 = -r4236121;
double r4236123 = -2.7394104193355045e-295;
bool r4236124 = r4236117 <= r4236123;
double r4236125 = 1.0;
double r4236126 = r4236117 * r4236117;
double r4236127 = 4.0;
double r4236128 = a;
double r4236129 = r4236128 * r4236120;
double r4236130 = r4236127 * r4236129;
double r4236131 = r4236126 - r4236130;
double r4236132 = sqrt(r4236131);
double r4236133 = r4236132 - r4236117;
double r4236134 = r4236125 / r4236133;
double r4236135 = 2.0;
double r4236136 = r4236135 * r4236120;
double r4236137 = r4236134 * r4236136;
double r4236138 = 4.0392005370549217e+149;
bool r4236139 = r4236117 <= r4236138;
double r4236140 = r4236128 * r4236135;
double r4236141 = -r4236117;
double r4236142 = r4236141 - r4236132;
double r4236143 = r4236140 / r4236142;
double r4236144 = r4236125 / r4236143;
double r4236145 = r4236117 / r4236128;
double r4236146 = r4236121 - r4236145;
double r4236147 = r4236139 ? r4236144 : r4236146;
double r4236148 = r4236124 ? r4236137 : r4236147;
double r4236149 = r4236119 ? r4236122 : r4236148;
return r4236149;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.0 |
| Herbie | 6.7 |
if b < -4.463381827278506e+97Initial program 58.7
Taylor expanded around -inf 2.1
Simplified2.1
if -4.463381827278506e+97 < b < -2.7394104193355045e-295Initial program 32.9
rmApplied *-un-lft-identity32.9
Applied *-un-lft-identity32.9
Applied distribute-rgt-neg-in32.9
Applied distribute-lft-out--32.9
Applied associate-/l*32.9
rmApplied flip--33.0
Applied associate-/r/33.1
Applied *-un-lft-identity33.1
Applied times-frac33.1
Simplified15.6
Simplified15.6
Taylor expanded around inf 8.7
if -2.7394104193355045e-295 < b < 4.0392005370549217e+149Initial program 9.4
rmApplied *-un-lft-identity9.4
Applied *-un-lft-identity9.4
Applied distribute-rgt-neg-in9.4
Applied distribute-lft-out--9.4
Applied associate-/l*9.6
if 4.0392005370549217e+149 < b Initial program 59.1
Taylor expanded around inf 2.6
Final simplification6.7
herbie shell --seed 2019139
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))