\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.550162015746626746000974336574470460524 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.61145084478121505718169973575148582501 \cdot 10^{-34}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r87764 = b;
double r87765 = -r87764;
double r87766 = r87764 * r87764;
double r87767 = 4.0;
double r87768 = a;
double r87769 = r87767 * r87768;
double r87770 = c;
double r87771 = r87769 * r87770;
double r87772 = r87766 - r87771;
double r87773 = sqrt(r87772);
double r87774 = r87765 + r87773;
double r87775 = 2.0;
double r87776 = r87775 * r87768;
double r87777 = r87774 / r87776;
return r87777;
}
double f(double a, double b, double c) {
double r87778 = b;
double r87779 = -1.5501620157466267e+150;
bool r87780 = r87778 <= r87779;
double r87781 = 1.0;
double r87782 = c;
double r87783 = r87782 / r87778;
double r87784 = a;
double r87785 = r87778 / r87784;
double r87786 = r87783 - r87785;
double r87787 = r87781 * r87786;
double r87788 = 1.611450844781215e-34;
bool r87789 = r87778 <= r87788;
double r87790 = 1.0;
double r87791 = 2.0;
double r87792 = r87791 * r87784;
double r87793 = r87778 * r87778;
double r87794 = 4.0;
double r87795 = r87794 * r87784;
double r87796 = r87795 * r87782;
double r87797 = r87793 - r87796;
double r87798 = sqrt(r87797);
double r87799 = r87798 - r87778;
double r87800 = r87792 / r87799;
double r87801 = r87790 / r87800;
double r87802 = -1.0;
double r87803 = r87802 * r87783;
double r87804 = r87789 ? r87801 : r87803;
double r87805 = r87780 ? r87787 : r87804;
return r87805;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.2 |
| Herbie | 9.9 |
if b < -1.5501620157466267e+150Initial program 62.9
Taylor expanded around -inf 1.7
Simplified1.7
if -1.5501620157466267e+150 < b < 1.611450844781215e-34Initial program 13.6
rmApplied clear-num13.7
Simplified13.7
if 1.611450844781215e-34 < b Initial program 55.0
Taylor expanded around inf 7.0
Final simplification9.9
herbie shell --seed 2019325
(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)))