\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 -1.857238265713216596268581045781308602833 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 4.631041364691662867016708422572785521166 \cdot 10^{-308}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{elif}\;b \le 1.292564275165585001505551266323067045785 \cdot 10^{140}:\\
\;\;\;\;\frac{\frac{1}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{\frac{2}{\frac{4}{\frac{1}{c}}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r120169 = b;
double r120170 = -r120169;
double r120171 = r120169 * r120169;
double r120172 = 4.0;
double r120173 = a;
double r120174 = r120172 * r120173;
double r120175 = c;
double r120176 = r120174 * r120175;
double r120177 = r120171 - r120176;
double r120178 = sqrt(r120177);
double r120179 = r120170 + r120178;
double r120180 = 2.0;
double r120181 = r120180 * r120173;
double r120182 = r120179 / r120181;
return r120182;
}
double f(double a, double b, double c) {
double r120183 = b;
double r120184 = -1.8572382657132166e+109;
bool r120185 = r120183 <= r120184;
double r120186 = 1.0;
double r120187 = c;
double r120188 = r120187 / r120183;
double r120189 = a;
double r120190 = r120183 / r120189;
double r120191 = r120188 - r120190;
double r120192 = r120186 * r120191;
double r120193 = 4.631041364691663e-308;
bool r120194 = r120183 <= r120193;
double r120195 = 1.0;
double r120196 = 2.0;
double r120197 = r120196 * r120189;
double r120198 = r120183 * r120183;
double r120199 = 4.0;
double r120200 = r120199 * r120189;
double r120201 = r120200 * r120187;
double r120202 = r120198 - r120201;
double r120203 = sqrt(r120202);
double r120204 = r120203 - r120183;
double r120205 = r120197 / r120204;
double r120206 = r120195 / r120205;
double r120207 = 1.292564275165585e+140;
bool r120208 = r120183 <= r120207;
double r120209 = -r120183;
double r120210 = r120209 - r120203;
double r120211 = r120195 / r120210;
double r120212 = r120195 / r120187;
double r120213 = r120199 / r120212;
double r120214 = r120196 / r120213;
double r120215 = r120211 / r120214;
double r120216 = -1.0;
double r120217 = r120216 * r120188;
double r120218 = r120208 ? r120215 : r120217;
double r120219 = r120194 ? r120206 : r120218;
double r120220 = r120185 ? r120192 : r120219;
return r120220;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.8 |
| Herbie | 6.5 |
if b < -1.8572382657132166e+109Initial program 50.1
Taylor expanded around -inf 3.6
Simplified3.6
if -1.8572382657132166e+109 < b < 4.631041364691663e-308Initial program 9.0
rmApplied clear-num9.2
Simplified9.2
if 4.631041364691663e-308 < b < 1.292564275165585e+140Initial program 34.6
rmApplied flip-+34.7
Simplified15.8
rmApplied clear-num16.0
Simplified16.0
rmApplied div-inv16.3
Applied *-un-lft-identity16.3
Applied times-frac16.2
Applied associate-/l*15.1
Simplified14.7
rmApplied associate-/l*14.7
Simplified8.2
if 1.292564275165585e+140 < b Initial program 62.6
Taylor expanded around inf 1.4
Final simplification6.5
herbie shell --seed 2019347
(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)))