\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.3044033969831823 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.9305277508569929 \cdot 10^{-82}:\\
\;\;\;\;\frac{1 \cdot \left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}{2 \cdot a}\\
\mathbf{elif}\;b \le 4.01993084419163312 \cdot 10^{109}:\\
\;\;\;\;\frac{\frac{1}{\sqrt[3]{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}{\frac{2 \cdot a}{4 \cdot \left(a \cdot c\right)} \cdot \sqrt[3]{\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 r81784 = b;
double r81785 = -r81784;
double r81786 = r81784 * r81784;
double r81787 = 4.0;
double r81788 = a;
double r81789 = r81787 * r81788;
double r81790 = c;
double r81791 = r81789 * r81790;
double r81792 = r81786 - r81791;
double r81793 = sqrt(r81792);
double r81794 = r81785 + r81793;
double r81795 = 2.0;
double r81796 = r81795 * r81788;
double r81797 = r81794 / r81796;
return r81797;
}
double f(double a, double b, double c) {
double r81798 = b;
double r81799 = -2.3044033969831823e+153;
bool r81800 = r81798 <= r81799;
double r81801 = 1.0;
double r81802 = c;
double r81803 = r81802 / r81798;
double r81804 = a;
double r81805 = r81798 / r81804;
double r81806 = r81803 - r81805;
double r81807 = r81801 * r81806;
double r81808 = 8.930527750856993e-82;
bool r81809 = r81798 <= r81808;
double r81810 = 1.0;
double r81811 = -r81798;
double r81812 = r81798 * r81798;
double r81813 = 4.0;
double r81814 = r81813 * r81804;
double r81815 = r81814 * r81802;
double r81816 = r81812 - r81815;
double r81817 = sqrt(r81816);
double r81818 = r81811 + r81817;
double r81819 = r81810 * r81818;
double r81820 = 2.0;
double r81821 = r81820 * r81804;
double r81822 = r81819 / r81821;
double r81823 = 4.019930844191633e+109;
bool r81824 = r81798 <= r81823;
double r81825 = r81811 - r81817;
double r81826 = cbrt(r81825);
double r81827 = r81826 * r81826;
double r81828 = r81810 / r81827;
double r81829 = r81804 * r81802;
double r81830 = r81813 * r81829;
double r81831 = r81821 / r81830;
double r81832 = r81831 * r81826;
double r81833 = r81828 / r81832;
double r81834 = -1.0;
double r81835 = r81834 * r81803;
double r81836 = r81824 ? r81833 : r81835;
double r81837 = r81809 ? r81822 : r81836;
double r81838 = r81800 ? r81807 : r81837;
return r81838;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 9.3 |
if b < -2.3044033969831823e+153Initial program 63.5
Taylor expanded around -inf 2.0
Simplified2.0
if -2.3044033969831823e+153 < b < 8.930527750856993e-82Initial program 12.5
rmApplied *-un-lft-identity12.5
if 8.930527750856993e-82 < b < 4.019930844191633e+109Initial program 43.0
rmApplied flip-+43.0
Simplified14.9
rmApplied add-cube-cbrt15.6
Applied *-un-lft-identity15.6
Applied times-frac15.6
Applied associate-/l*14.3
Simplified13.8
if 4.019930844191633e+109 < b Initial program 59.9
Taylor expanded around inf 2.4
Final simplification9.3
herbie shell --seed 2020060 +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)))