\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.555632367828988861043913196266489993904 \cdot 10^{101}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -1.588581026022229142935221773282266391902 \cdot 10^{-168}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{{b}^{2} - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 87537227540251800037021545535125898395650:\\
\;\;\;\;\frac{\frac{c \cdot 4}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{2}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r57818 = b;
double r57819 = -r57818;
double r57820 = r57818 * r57818;
double r57821 = 4.0;
double r57822 = a;
double r57823 = c;
double r57824 = r57822 * r57823;
double r57825 = r57821 * r57824;
double r57826 = r57820 - r57825;
double r57827 = sqrt(r57826);
double r57828 = r57819 + r57827;
double r57829 = 2.0;
double r57830 = r57829 * r57822;
double r57831 = r57828 / r57830;
return r57831;
}
double f(double a, double b, double c) {
double r57832 = b;
double r57833 = -1.555632367828989e+101;
bool r57834 = r57832 <= r57833;
double r57835 = 1.0;
double r57836 = c;
double r57837 = r57836 / r57832;
double r57838 = a;
double r57839 = r57832 / r57838;
double r57840 = r57837 - r57839;
double r57841 = r57835 * r57840;
double r57842 = -1.5885810260222291e-168;
bool r57843 = r57832 <= r57842;
double r57844 = -r57832;
double r57845 = 2.0;
double r57846 = pow(r57832, r57845);
double r57847 = 4.0;
double r57848 = r57838 * r57836;
double r57849 = r57847 * r57848;
double r57850 = r57846 - r57849;
double r57851 = sqrt(r57850);
double r57852 = r57844 + r57851;
double r57853 = 2.0;
double r57854 = r57853 * r57838;
double r57855 = r57852 / r57854;
double r57856 = 8.75372275402518e+40;
bool r57857 = r57832 <= r57856;
double r57858 = r57836 * r57847;
double r57859 = r57832 * r57832;
double r57860 = r57859 - r57849;
double r57861 = sqrt(r57860);
double r57862 = r57844 - r57861;
double r57863 = r57858 / r57862;
double r57864 = r57863 / r57853;
double r57865 = -1.0;
double r57866 = r57865 * r57837;
double r57867 = r57857 ? r57864 : r57866;
double r57868 = r57843 ? r57855 : r57867;
double r57869 = r57834 ? r57841 : r57868;
return r57869;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 20.8 |
| Herbie | 7.3 |
if b < -1.555632367828989e+101Initial program 47.4
Taylor expanded around -inf 3.6
Simplified3.6
if -1.555632367828989e+101 < b < -1.5885810260222291e-168Initial program 7.2
Taylor expanded around 0 7.2
if -1.5885810260222291e-168 < b < 8.75372275402518e+40Initial program 25.8
rmApplied flip-+26.0
Simplified16.9
rmApplied div-inv17.0
Applied times-frac23.1
Simplified23.1
rmApplied associate-*l/23.1
Simplified22.8
rmApplied times-frac11.5
Simplified11.5
if 8.75372275402518e+40 < b Initial program 56.7
Taylor expanded around inf 4.5
Final simplification7.3
herbie shell --seed 2019323 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))