\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.32337788234514 \cdot 10^{-89}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 1.4404833532724588 \cdot 10^{+150}:\\
\;\;\;\;\frac{1}{\frac{\frac{a}{\frac{1}{2}}}{-\left(\sqrt{\mathsf{fma}\left(-4, c \cdot a, b \cdot b\right)} + b\right)}}\\
\mathbf{else}:\\
\;\;\;\;\left(2 \cdot \left(\frac{a}{\frac{b}{c}} - b\right)\right) \cdot \frac{\frac{1}{2}}{a}\\
\end{array}double f(double a, double b, double c) {
double r3013126 = b;
double r3013127 = -r3013126;
double r3013128 = r3013126 * r3013126;
double r3013129 = 4.0;
double r3013130 = a;
double r3013131 = c;
double r3013132 = r3013130 * r3013131;
double r3013133 = r3013129 * r3013132;
double r3013134 = r3013128 - r3013133;
double r3013135 = sqrt(r3013134);
double r3013136 = r3013127 - r3013135;
double r3013137 = 2.0;
double r3013138 = r3013137 * r3013130;
double r3013139 = r3013136 / r3013138;
return r3013139;
}
double f(double a, double b, double c) {
double r3013140 = b;
double r3013141 = -4.32337788234514e-89;
bool r3013142 = r3013140 <= r3013141;
double r3013143 = c;
double r3013144 = r3013143 / r3013140;
double r3013145 = -r3013144;
double r3013146 = 1.4404833532724588e+150;
bool r3013147 = r3013140 <= r3013146;
double r3013148 = 1.0;
double r3013149 = a;
double r3013150 = 0.5;
double r3013151 = r3013149 / r3013150;
double r3013152 = -4.0;
double r3013153 = r3013143 * r3013149;
double r3013154 = r3013140 * r3013140;
double r3013155 = fma(r3013152, r3013153, r3013154);
double r3013156 = sqrt(r3013155);
double r3013157 = r3013156 + r3013140;
double r3013158 = -r3013157;
double r3013159 = r3013151 / r3013158;
double r3013160 = r3013148 / r3013159;
double r3013161 = 2.0;
double r3013162 = r3013140 / r3013143;
double r3013163 = r3013149 / r3013162;
double r3013164 = r3013163 - r3013140;
double r3013165 = r3013161 * r3013164;
double r3013166 = r3013150 / r3013149;
double r3013167 = r3013165 * r3013166;
double r3013168 = r3013147 ? r3013160 : r3013167;
double r3013169 = r3013142 ? r3013145 : r3013168;
return r3013169;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.1 |
|---|---|
| Target | 21.0 |
| Herbie | 10.1 |
if b < -4.32337788234514e-89Initial program 52.3
rmApplied div-inv52.3
Simplified52.3
Taylor expanded around -inf 9.2
Simplified9.2
if -4.32337788234514e-89 < b < 1.4404833532724588e+150Initial program 12.3
rmApplied clear-num12.4
Simplified12.4
if 1.4404833532724588e+150 < b Initial program 59.4
rmApplied div-inv59.4
Simplified59.4
Taylor expanded around inf 12.3
Simplified3.0
Final simplification10.1
herbie shell --seed 2019139 +o rules:numerics
(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)))