\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 -6.178777554815223 \cdot 10^{-59}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le -2.4426257271971575 \cdot 10^{-81}:\\
\;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\
\mathbf{elif}\;b \le -2.1997396407715757 \cdot 10^{-160}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 7.548494687587984 \cdot 10^{+83}:\\
\;\;\;\;\frac{\frac{-b}{a} - \frac{\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)}}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}{2}\\
\end{array}double f(double a, double b, double c) {
double r3577077 = b;
double r3577078 = -r3577077;
double r3577079 = r3577077 * r3577077;
double r3577080 = 4.0;
double r3577081 = a;
double r3577082 = c;
double r3577083 = r3577081 * r3577082;
double r3577084 = r3577080 * r3577083;
double r3577085 = r3577079 - r3577084;
double r3577086 = sqrt(r3577085);
double r3577087 = r3577078 - r3577086;
double r3577088 = 2.0;
double r3577089 = r3577088 * r3577081;
double r3577090 = r3577087 / r3577089;
return r3577090;
}
double f(double a, double b, double c) {
double r3577091 = b;
double r3577092 = -6.178777554815223e-59;
bool r3577093 = r3577091 <= r3577092;
double r3577094 = -2.0;
double r3577095 = c;
double r3577096 = r3577095 / r3577091;
double r3577097 = r3577094 * r3577096;
double r3577098 = 2.0;
double r3577099 = r3577097 / r3577098;
double r3577100 = -2.4426257271971575e-81;
bool r3577101 = r3577091 <= r3577100;
double r3577102 = -r3577091;
double r3577103 = a;
double r3577104 = r3577102 / r3577103;
double r3577105 = -4.0;
double r3577106 = r3577103 * r3577105;
double r3577107 = r3577091 * r3577091;
double r3577108 = fma(r3577095, r3577106, r3577107);
double r3577109 = sqrt(r3577108);
double r3577110 = r3577109 / r3577103;
double r3577111 = r3577104 - r3577110;
double r3577112 = r3577111 / r3577098;
double r3577113 = -2.1997396407715757e-160;
bool r3577114 = r3577091 <= r3577113;
double r3577115 = 7.548494687587984e+83;
bool r3577116 = r3577091 <= r3577115;
double r3577117 = r3577091 / r3577103;
double r3577118 = r3577096 - r3577117;
double r3577119 = r3577098 * r3577118;
double r3577120 = r3577119 / r3577098;
double r3577121 = r3577116 ? r3577112 : r3577120;
double r3577122 = r3577114 ? r3577099 : r3577121;
double r3577123 = r3577101 ? r3577112 : r3577122;
double r3577124 = r3577093 ? r3577099 : r3577123;
return r3577124;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 20.8 |
| Herbie | 10.7 |
if b < -6.178777554815223e-59 or -2.4426257271971575e-81 < b < -2.1997396407715757e-160Initial program 50.3
Simplified50.3
Taylor expanded around 0 50.3
Simplified50.3
Taylor expanded around -inf 12.1
if -6.178777554815223e-59 < b < -2.4426257271971575e-81 or -2.1997396407715757e-160 < b < 7.548494687587984e+83Initial program 12.0
Simplified12.0
Taylor expanded around 0 12.0
Simplified12.0
rmApplied div-sub12.0
if 7.548494687587984e+83 < b Initial program 42.5
Simplified42.4
Taylor expanded around 0 42.5
Simplified42.4
Taylor expanded around inf 4.1
Simplified4.1
Final simplification10.7
herbie shell --seed 2019142 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))