\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.175442848374641 \cdot 10^{+103}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -2.5616198420313977 \cdot 10^{-226}:\\
\;\;\;\;\frac{4}{\sqrt{c \cdot \left(-4 \cdot a\right) + b \cdot b} - b} \cdot \left(\frac{1}{2} \cdot c\right)\\
\mathbf{elif}\;b \le 1.8091015183831773 \cdot 10^{+43}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r5342796 = b;
double r5342797 = -r5342796;
double r5342798 = r5342796 * r5342796;
double r5342799 = 4.0;
double r5342800 = a;
double r5342801 = c;
double r5342802 = r5342800 * r5342801;
double r5342803 = r5342799 * r5342802;
double r5342804 = r5342798 - r5342803;
double r5342805 = sqrt(r5342804);
double r5342806 = r5342797 - r5342805;
double r5342807 = 2.0;
double r5342808 = r5342807 * r5342800;
double r5342809 = r5342806 / r5342808;
return r5342809;
}
double f(double a, double b, double c) {
double r5342810 = b;
double r5342811 = -6.175442848374641e+103;
bool r5342812 = r5342810 <= r5342811;
double r5342813 = c;
double r5342814 = r5342813 / r5342810;
double r5342815 = -r5342814;
double r5342816 = -2.5616198420313977e-226;
bool r5342817 = r5342810 <= r5342816;
double r5342818 = 4.0;
double r5342819 = -4.0;
double r5342820 = a;
double r5342821 = r5342819 * r5342820;
double r5342822 = r5342813 * r5342821;
double r5342823 = r5342810 * r5342810;
double r5342824 = r5342822 + r5342823;
double r5342825 = sqrt(r5342824);
double r5342826 = r5342825 - r5342810;
double r5342827 = r5342818 / r5342826;
double r5342828 = 0.5;
double r5342829 = r5342828 * r5342813;
double r5342830 = r5342827 * r5342829;
double r5342831 = 1.8091015183831773e+43;
bool r5342832 = r5342810 <= r5342831;
double r5342833 = -r5342810;
double r5342834 = r5342820 * r5342813;
double r5342835 = r5342834 * r5342818;
double r5342836 = r5342823 - r5342835;
double r5342837 = sqrt(r5342836);
double r5342838 = r5342833 - r5342837;
double r5342839 = 2.0;
double r5342840 = r5342839 * r5342820;
double r5342841 = r5342838 / r5342840;
double r5342842 = r5342810 / r5342820;
double r5342843 = r5342814 - r5342842;
double r5342844 = r5342832 ? r5342841 : r5342843;
double r5342845 = r5342817 ? r5342830 : r5342844;
double r5342846 = r5342812 ? r5342815 : r5342845;
return r5342846;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.5 |
|---|---|
| Target | 21.1 |
| Herbie | 7.3 |
if b < -6.175442848374641e+103Initial program 59.2
Taylor expanded around -inf 2.8
Simplified2.8
if -6.175442848374641e+103 < b < -2.5616198420313977e-226Initial program 35.4
rmApplied flip--35.5
Applied associate-/l/39.6
Simplified20.9
rmApplied times-frac15.9
Simplified8.5
Simplified8.5
if -2.5616198420313977e-226 < b < 1.8091015183831773e+43Initial program 10.6
if 1.8091015183831773e+43 < b Initial program 36.3
Taylor expanded around inf 5.7
Final simplification7.3
herbie shell --seed 2019120
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))