\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 -3.546317250153943051696268494209933101223 \cdot 10^{99}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le \frac{1119122677593389}{1.372959532026121942996380159816278643454 \cdot 10^{157}}:\\
\;\;\;\;\frac{\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2}}{a}\\
\mathbf{elif}\;b \le 19249548690054332:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{4 \cdot \left(a \cdot c\right)} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r72171 = b;
double r72172 = -r72171;
double r72173 = r72171 * r72171;
double r72174 = 4.0;
double r72175 = a;
double r72176 = c;
double r72177 = r72175 * r72176;
double r72178 = r72174 * r72177;
double r72179 = r72173 - r72178;
double r72180 = sqrt(r72179);
double r72181 = r72172 + r72180;
double r72182 = 2.0;
double r72183 = r72182 * r72175;
double r72184 = r72181 / r72183;
return r72184;
}
double f(double a, double b, double c) {
double r72185 = b;
double r72186 = -3.546317250153943e+99;
bool r72187 = r72185 <= r72186;
double r72188 = 1.0;
double r72189 = c;
double r72190 = r72189 / r72185;
double r72191 = a;
double r72192 = r72185 / r72191;
double r72193 = r72190 - r72192;
double r72194 = r72188 * r72193;
double r72195 = 1119122677593389.0;
double r72196 = 1.372959532026122e+157;
double r72197 = r72195 / r72196;
bool r72198 = r72185 <= r72197;
double r72199 = -r72185;
double r72200 = r72185 * r72185;
double r72201 = 4.0;
double r72202 = r72191 * r72189;
double r72203 = r72201 * r72202;
double r72204 = r72200 - r72203;
double r72205 = sqrt(r72204);
double r72206 = r72199 + r72205;
double r72207 = 2.0;
double r72208 = r72206 / r72207;
double r72209 = r72208 / r72191;
double r72210 = 19249548690054332.0;
bool r72211 = r72185 <= r72210;
double r72212 = 1.0;
double r72213 = r72207 * r72191;
double r72214 = r72213 / r72203;
double r72215 = r72199 - r72205;
double r72216 = r72214 * r72215;
double r72217 = r72212 / r72216;
double r72218 = -1.0;
double r72219 = r72218 * r72190;
double r72220 = r72211 ? r72217 : r72219;
double r72221 = r72198 ? r72209 : r72220;
double r72222 = r72187 ? r72194 : r72221;
return r72222;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.9 |
|---|---|
| Target | 21.7 |
| Herbie | 8.8 |
if b < -3.546317250153943e+99Initial program 46.9
Taylor expanded around -inf 3.7
Simplified3.7
if -3.546317250153943e+99 < b < 8.151170165531846e-143Initial program 11.9
rmApplied associate-/r*11.9
if 8.151170165531846e-143 < b < 19249548690054332.0Initial program 35.2
rmApplied flip-+35.2
Simplified16.3
rmApplied *-un-lft-identity16.3
Applied *-un-lft-identity16.3
Applied times-frac16.3
Applied associate-/l*16.4
Simplified16.3
if 19249548690054332.0 < b Initial program 56.9
Taylor expanded around inf 4.8
Final simplification8.8
herbie shell --seed 197574269
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))