\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.650716803435188882222807352588915693143 \cdot 10^{100}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 1.586183022085898567784328170731092391431 \cdot 10^{-203}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} + \left(-b\right)}\\
\mathbf{elif}\;b \le 6.994525771494005489896684232081336893823 \cdot 10^{142}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, \left(c \cdot a\right) \cdot \left(-4\right)\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r4104989 = b;
double r4104990 = -r4104989;
double r4104991 = r4104989 * r4104989;
double r4104992 = 4.0;
double r4104993 = a;
double r4104994 = c;
double r4104995 = r4104993 * r4104994;
double r4104996 = r4104992 * r4104995;
double r4104997 = r4104991 - r4104996;
double r4104998 = sqrt(r4104997);
double r4104999 = r4104990 - r4104998;
double r4105000 = 2.0;
double r4105001 = r4105000 * r4104993;
double r4105002 = r4104999 / r4105001;
return r4105002;
}
double f(double a, double b, double c) {
double r4105003 = b;
double r4105004 = -1.6507168034351889e+100;
bool r4105005 = r4105003 <= r4105004;
double r4105006 = -1.0;
double r4105007 = c;
double r4105008 = r4105007 / r4105003;
double r4105009 = r4105006 * r4105008;
double r4105010 = 1.5861830220858986e-203;
bool r4105011 = r4105003 <= r4105010;
double r4105012 = 2.0;
double r4105013 = r4105012 * r4105007;
double r4105014 = r4105003 * r4105003;
double r4105015 = a;
double r4105016 = r4105007 * r4105015;
double r4105017 = 4.0;
double r4105018 = r4105016 * r4105017;
double r4105019 = r4105014 - r4105018;
double r4105020 = sqrt(r4105019);
double r4105021 = -r4105003;
double r4105022 = r4105020 + r4105021;
double r4105023 = r4105013 / r4105022;
double r4105024 = 6.994525771494005e+142;
bool r4105025 = r4105003 <= r4105024;
double r4105026 = -r4105017;
double r4105027 = r4105016 * r4105026;
double r4105028 = fma(r4105003, r4105003, r4105027);
double r4105029 = sqrt(r4105028);
double r4105030 = r4105021 - r4105029;
double r4105031 = r4105012 * r4105015;
double r4105032 = r4105030 / r4105031;
double r4105033 = 1.0;
double r4105034 = r4105003 / r4105015;
double r4105035 = r4105008 - r4105034;
double r4105036 = r4105033 * r4105035;
double r4105037 = r4105025 ? r4105032 : r4105036;
double r4105038 = r4105011 ? r4105023 : r4105037;
double r4105039 = r4105005 ? r4105009 : r4105038;
return r4105039;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.2 |
|---|---|
| Target | 21.1 |
| Herbie | 6.5 |
if b < -1.6507168034351889e+100Initial program 59.6
Taylor expanded around -inf 2.8
if -1.6507168034351889e+100 < b < 1.5861830220858986e-203Initial program 30.0
rmApplied div-inv30.1
rmApplied flip--30.2
Applied associate-*l/30.2
Simplified15.6
Taylor expanded around 0 9.8
if 1.5861830220858986e-203 < b < 6.994525771494005e+142Initial program 7.3
rmApplied fma-neg7.3
if 6.994525771494005e+142 < b Initial program 59.9
Taylor expanded around inf 2.1
Simplified2.1
Final simplification6.5
herbie shell --seed 2019200 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))