\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 -3.974595954042361881691403492534140168485 \cdot 10^{78}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.1066699921689209753658832131181641309 \cdot 10^{-249}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.329448504580570356283886843099725433358 \cdot 10^{-14}:\\
\;\;\;\;\frac{1 \cdot \frac{4}{\frac{1}{a} \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{c}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r167136 = b;
double r167137 = -r167136;
double r167138 = r167136 * r167136;
double r167139 = 4.0;
double r167140 = a;
double r167141 = r167139 * r167140;
double r167142 = c;
double r167143 = r167141 * r167142;
double r167144 = r167138 - r167143;
double r167145 = sqrt(r167144);
double r167146 = r167137 + r167145;
double r167147 = 2.0;
double r167148 = r167147 * r167140;
double r167149 = r167146 / r167148;
return r167149;
}
double f(double a, double b, double c) {
double r167150 = b;
double r167151 = -3.974595954042362e+78;
bool r167152 = r167150 <= r167151;
double r167153 = 1.0;
double r167154 = c;
double r167155 = r167154 / r167150;
double r167156 = a;
double r167157 = r167150 / r167156;
double r167158 = r167155 - r167157;
double r167159 = r167153 * r167158;
double r167160 = -3.106669992168921e-249;
bool r167161 = r167150 <= r167160;
double r167162 = -r167150;
double r167163 = r167150 * r167150;
double r167164 = 4.0;
double r167165 = r167164 * r167156;
double r167166 = r167165 * r167154;
double r167167 = r167163 - r167166;
double r167168 = sqrt(r167167);
double r167169 = r167162 + r167168;
double r167170 = 1.0;
double r167171 = 2.0;
double r167172 = r167171 * r167156;
double r167173 = r167170 / r167172;
double r167174 = r167169 * r167173;
double r167175 = 3.3294485045805704e-14;
bool r167176 = r167150 <= r167175;
double r167177 = r167170 / r167156;
double r167178 = r167162 - r167168;
double r167179 = r167178 / r167154;
double r167180 = r167177 * r167179;
double r167181 = r167164 / r167180;
double r167182 = r167170 * r167181;
double r167183 = r167182 / r167172;
double r167184 = -1.0;
double r167185 = r167184 * r167155;
double r167186 = r167176 ? r167183 : r167185;
double r167187 = r167161 ? r167174 : r167186;
double r167188 = r167152 ? r167159 : r167187;
return r167188;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 8.2 |
if b < -3.974595954042362e+78Initial program 41.5
Taylor expanded around -inf 4.2
Simplified4.2
if -3.974595954042362e+78 < b < -3.106669992168921e-249Initial program 8.2
rmApplied div-inv8.3
if -3.106669992168921e-249 < b < 3.3294485045805704e-14Initial program 23.6
rmApplied flip-+23.7
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied *-un-lft-identity17.5
Applied times-frac17.5
Simplified17.5
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied times-frac14.8
if 3.3294485045805704e-14 < b Initial program 55.3
Taylor expanded around inf 5.9
Final simplification8.2
herbie shell --seed 2019352 +o rules:numerics
(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)))