\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 -2.223763057046510327568967152287533282505 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.319380566438366601816459280349243307141 \cdot 10^{-186}:\\
\;\;\;\;\frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2} \cdot \frac{\sqrt{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{a}\\
\mathbf{elif}\;b \le 1.458057835821772074616178333218437979276 \cdot 10^{144}:\\
\;\;\;\;\frac{\frac{1}{0.5} \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r97111 = b;
double r97112 = -r97111;
double r97113 = r97111 * r97111;
double r97114 = 4.0;
double r97115 = a;
double r97116 = r97114 * r97115;
double r97117 = c;
double r97118 = r97116 * r97117;
double r97119 = r97113 - r97118;
double r97120 = sqrt(r97119);
double r97121 = r97112 + r97120;
double r97122 = 2.0;
double r97123 = r97122 * r97115;
double r97124 = r97121 / r97123;
return r97124;
}
double f(double a, double b, double c) {
double r97125 = b;
double r97126 = -2.2237630570465103e+109;
bool r97127 = r97125 <= r97126;
double r97128 = 1.0;
double r97129 = c;
double r97130 = r97129 / r97125;
double r97131 = a;
double r97132 = r97125 / r97131;
double r97133 = r97130 - r97132;
double r97134 = r97128 * r97133;
double r97135 = -3.3193805664383666e-186;
bool r97136 = r97125 <= r97135;
double r97137 = -r97125;
double r97138 = r97125 * r97125;
double r97139 = 4.0;
double r97140 = r97139 * r97131;
double r97141 = r97140 * r97129;
double r97142 = r97138 - r97141;
double r97143 = sqrt(r97142);
double r97144 = r97137 + r97143;
double r97145 = sqrt(r97144);
double r97146 = 2.0;
double r97147 = r97145 / r97146;
double r97148 = r97145 / r97131;
double r97149 = r97147 * r97148;
double r97150 = 1.458057835821772e+144;
bool r97151 = r97125 <= r97150;
double r97152 = 1.0;
double r97153 = 0.5;
double r97154 = r97152 / r97153;
double r97155 = r97154 * r97129;
double r97156 = r97137 - r97143;
double r97157 = r97155 / r97156;
double r97158 = -1.0;
double r97159 = r97158 * r97130;
double r97160 = r97151 ? r97157 : r97159;
double r97161 = r97136 ? r97149 : r97160;
double r97162 = r97127 ? r97134 : r97161;
return r97162;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 6.7 |
if b < -2.2237630570465103e+109Initial program 48.6
Taylor expanded around -inf 3.3
Simplified3.3
if -2.2237630570465103e+109 < b < -3.3193805664383666e-186Initial program 6.9
rmApplied add-sqr-sqrt7.3
Applied times-frac7.3
if -3.3193805664383666e-186 < b < 1.458057835821772e+144Initial program 31.3
rmApplied flip-+31.5
Simplified16.1
rmApplied *-un-lft-identity16.1
Applied *-un-lft-identity16.1
Applied times-frac16.1
Applied associate-/l*16.3
Simplified15.3
Taylor expanded around 0 10.2
rmApplied associate-/r*9.9
Simplified9.8
if 1.458057835821772e+144 < b Initial program 62.9
Taylor expanded around inf 1.5
Final simplification6.7
herbie shell --seed 2020001
(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)))