\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 -1.6733539759872003 \cdot 10^{120}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 2.34481359587178172 \cdot 10^{-114}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}\\
\mathbf{elif}\;b \le 3.36279139322822572 \cdot 10^{22}:\\
\;\;\;\;\frac{\frac{\left(4 \cdot c\right) \cdot a}{\left(-b\right) - \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}} \cdot \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r49170 = b;
double r49171 = -r49170;
double r49172 = r49170 * r49170;
double r49173 = 4.0;
double r49174 = a;
double r49175 = c;
double r49176 = r49174 * r49175;
double r49177 = r49173 * r49176;
double r49178 = r49172 - r49177;
double r49179 = sqrt(r49178);
double r49180 = r49171 + r49179;
double r49181 = 2.0;
double r49182 = r49181 * r49174;
double r49183 = r49180 / r49182;
return r49183;
}
double f(double a, double b, double c) {
double r49184 = b;
double r49185 = -1.6733539759872003e+120;
bool r49186 = r49184 <= r49185;
double r49187 = 1.0;
double r49188 = c;
double r49189 = r49188 / r49184;
double r49190 = a;
double r49191 = r49184 / r49190;
double r49192 = r49189 - r49191;
double r49193 = r49187 * r49192;
double r49194 = 2.3448135958717817e-114;
bool r49195 = r49184 <= r49194;
double r49196 = 1.0;
double r49197 = 2.0;
double r49198 = r49197 * r49190;
double r49199 = r49184 * r49184;
double r49200 = 4.0;
double r49201 = r49190 * r49188;
double r49202 = r49200 * r49201;
double r49203 = r49199 - r49202;
double r49204 = sqrt(r49203);
double r49205 = r49204 - r49184;
double r49206 = r49198 / r49205;
double r49207 = r49196 / r49206;
double r49208 = 3.3627913932282257e+22;
bool r49209 = r49184 <= r49208;
double r49210 = r49200 * r49188;
double r49211 = r49210 * r49190;
double r49212 = -r49184;
double r49213 = sqrt(r49204);
double r49214 = r49213 * r49213;
double r49215 = r49212 - r49214;
double r49216 = r49211 / r49215;
double r49217 = r49216 / r49198;
double r49218 = -1.0;
double r49219 = r49218 * r49189;
double r49220 = r49209 ? r49217 : r49219;
double r49221 = r49195 ? r49207 : r49220;
double r49222 = r49186 ? r49193 : r49221;
return r49222;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 20.8 |
| Herbie | 8.8 |
if b < -1.6733539759872003e+120Initial program 52.5
Taylor expanded around -inf 3.1
Simplified3.1
if -1.6733539759872003e+120 < b < 2.3448135958717817e-114Initial program 11.0
rmApplied clear-num11.2
Simplified11.2
if 2.3448135958717817e-114 < b < 3.3627913932282257e+22Initial program 36.9
rmApplied flip-+36.9
Simplified16.0
rmApplied add-sqr-sqrt16.0
Applied sqrt-prod16.1
if 3.3627913932282257e+22 < b Initial program 56.3
Taylor expanded around inf 5.1
Final simplification8.8
herbie shell --seed 2019198 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))