\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 -5.4270583274198304 \cdot 10^{68}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -1.8135608595479747 \cdot 10^{-242}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.0781255133678807 \cdot 10^{124}:\\
\;\;\;\;\frac{\frac{1}{\frac{2}{4}} \cdot c}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r71692 = b;
double r71693 = -r71692;
double r71694 = r71692 * r71692;
double r71695 = 4.0;
double r71696 = a;
double r71697 = c;
double r71698 = r71696 * r71697;
double r71699 = r71695 * r71698;
double r71700 = r71694 - r71699;
double r71701 = sqrt(r71700);
double r71702 = r71693 + r71701;
double r71703 = 2.0;
double r71704 = r71703 * r71696;
double r71705 = r71702 / r71704;
return r71705;
}
double f(double a, double b, double c) {
double r71706 = b;
double r71707 = -5.42705832741983e+68;
bool r71708 = r71706 <= r71707;
double r71709 = 1.0;
double r71710 = c;
double r71711 = r71710 / r71706;
double r71712 = a;
double r71713 = r71706 / r71712;
double r71714 = r71711 - r71713;
double r71715 = r71709 * r71714;
double r71716 = -1.8135608595479747e-242;
bool r71717 = r71706 <= r71716;
double r71718 = -r71706;
double r71719 = r71706 * r71706;
double r71720 = 4.0;
double r71721 = r71712 * r71710;
double r71722 = r71720 * r71721;
double r71723 = r71719 - r71722;
double r71724 = sqrt(r71723);
double r71725 = r71718 + r71724;
double r71726 = 2.0;
double r71727 = r71726 * r71712;
double r71728 = r71725 / r71727;
double r71729 = 3.0781255133678807e+124;
bool r71730 = r71706 <= r71729;
double r71731 = 1.0;
double r71732 = r71726 / r71720;
double r71733 = r71731 / r71732;
double r71734 = r71733 * r71710;
double r71735 = r71718 - r71724;
double r71736 = r71734 / r71735;
double r71737 = -1.0;
double r71738 = r71737 * r71711;
double r71739 = r71730 ? r71736 : r71738;
double r71740 = r71717 ? r71728 : r71739;
double r71741 = r71708 ? r71715 : r71740;
return r71741;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.1 |
| Herbie | 6.9 |
if b < -5.42705832741983e+68Initial program 41.1
Taylor expanded around -inf 4.6
Simplified4.6
if -5.42705832741983e+68 < b < -1.8135608595479747e-242Initial program 9.0
if -1.8135608595479747e-242 < b < 3.0781255133678807e+124Initial program 31.6
rmApplied flip-+31.7
Simplified16.0
rmApplied *-un-lft-identity16.0
Applied *-un-lft-identity16.0
Applied times-frac16.0
Applied associate-/l*16.2
Simplified15.4
rmApplied times-frac15.4
Simplified9.9
rmApplied associate-/r*9.5
Simplified9.4
if 3.0781255133678807e+124 < b Initial program 61.3
Taylor expanded around inf 2.2
Final simplification6.9
herbie shell --seed 2020033
(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)))