\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -2.880394710329243 \cdot 10^{+120}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 5.818192251940127 \cdot 10^{-227}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} - b}{a \cdot 2}\\
\mathbf{elif}\;b \le 6.6006279600139335 \cdot 10^{+131}:\\
\;\;\;\;\left(c \cdot -2\right) \cdot \frac{1}{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r28755692 = b;
double r28755693 = -r28755692;
double r28755694 = r28755692 * r28755692;
double r28755695 = 4.0;
double r28755696 = a;
double r28755697 = r28755695 * r28755696;
double r28755698 = c;
double r28755699 = r28755697 * r28755698;
double r28755700 = r28755694 - r28755699;
double r28755701 = sqrt(r28755700);
double r28755702 = r28755693 + r28755701;
double r28755703 = 2.0;
double r28755704 = r28755703 * r28755696;
double r28755705 = r28755702 / r28755704;
return r28755705;
}
double f(double a, double b, double c) {
double r28755706 = b;
double r28755707 = -2.880394710329243e+120;
bool r28755708 = r28755706 <= r28755707;
double r28755709 = c;
double r28755710 = r28755709 / r28755706;
double r28755711 = a;
double r28755712 = r28755706 / r28755711;
double r28755713 = r28755710 - r28755712;
double r28755714 = 5.818192251940127e-227;
bool r28755715 = r28755706 <= r28755714;
double r28755716 = r28755706 * r28755706;
double r28755717 = r28755709 * r28755711;
double r28755718 = 4.0;
double r28755719 = r28755717 * r28755718;
double r28755720 = r28755716 - r28755719;
double r28755721 = sqrt(r28755720);
double r28755722 = r28755721 - r28755706;
double r28755723 = 2.0;
double r28755724 = r28755711 * r28755723;
double r28755725 = r28755722 / r28755724;
double r28755726 = 6.6006279600139335e+131;
bool r28755727 = r28755706 <= r28755726;
double r28755728 = -2.0;
double r28755729 = r28755709 * r28755728;
double r28755730 = 1.0;
double r28755731 = r28755721 + r28755706;
double r28755732 = r28755730 / r28755731;
double r28755733 = r28755729 * r28755732;
double r28755734 = -r28755710;
double r28755735 = r28755727 ? r28755733 : r28755734;
double r28755736 = r28755715 ? r28755725 : r28755735;
double r28755737 = r28755708 ? r28755713 : r28755736;
return r28755737;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 32.9 |
|---|---|
| Target | 20.3 |
| Herbie | 6.4 |
if b < -2.880394710329243e+120Initial program 49.1
Simplified49.1
Taylor expanded around -inf 2.7
if -2.880394710329243e+120 < b < 5.818192251940127e-227Initial program 9.3
Simplified9.3
if 5.818192251940127e-227 < b < 6.6006279600139335e+131Initial program 35.9
Simplified35.9
rmApplied *-un-lft-identity35.9
Applied associate-/l*35.9
rmApplied flip--36.0
Applied associate-/r/36.1
Applied *-un-lft-identity36.1
Applied times-frac36.1
Simplified13.6
Taylor expanded around 0 7.3
if 6.6006279600139335e+131 < b Initial program 60.5
Simplified60.5
Taylor expanded around inf 2.2
Simplified2.2
Final simplification6.4
herbie shell --seed 2019124
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 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)))