\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 -1.7431685240570133 \cdot 10^{102}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.0417939395900796 \cdot 10^{-259}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{elif}\;b \le 9.37351117144741807 \cdot 10^{103}:\\
\;\;\;\;\left(\frac{\frac{1}{\sqrt[3]{1} \cdot \sqrt[3]{1}}}{2} \cdot \left(c \cdot 4\right)\right) \cdot \frac{\frac{1}{\sqrt[3]{1}}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r103658 = b;
double r103659 = -r103658;
double r103660 = r103658 * r103658;
double r103661 = 4.0;
double r103662 = a;
double r103663 = r103661 * r103662;
double r103664 = c;
double r103665 = r103663 * r103664;
double r103666 = r103660 - r103665;
double r103667 = sqrt(r103666);
double r103668 = r103659 + r103667;
double r103669 = 2.0;
double r103670 = r103669 * r103662;
double r103671 = r103668 / r103670;
return r103671;
}
double f(double a, double b, double c) {
double r103672 = b;
double r103673 = -1.7431685240570133e+102;
bool r103674 = r103672 <= r103673;
double r103675 = 1.0;
double r103676 = c;
double r103677 = r103676 / r103672;
double r103678 = a;
double r103679 = r103672 / r103678;
double r103680 = r103677 - r103679;
double r103681 = r103675 * r103680;
double r103682 = 1.0417939395900796e-259;
bool r103683 = r103672 <= r103682;
double r103684 = -r103672;
double r103685 = r103672 * r103672;
double r103686 = 4.0;
double r103687 = r103686 * r103678;
double r103688 = r103687 * r103676;
double r103689 = r103685 - r103688;
double r103690 = sqrt(r103689);
double r103691 = r103684 + r103690;
double r103692 = 2.0;
double r103693 = r103692 * r103678;
double r103694 = r103691 / r103693;
double r103695 = 9.373511171447418e+103;
bool r103696 = r103672 <= r103695;
double r103697 = 1.0;
double r103698 = cbrt(r103697);
double r103699 = r103698 * r103698;
double r103700 = r103697 / r103699;
double r103701 = r103700 / r103692;
double r103702 = r103676 * r103686;
double r103703 = r103701 * r103702;
double r103704 = r103697 / r103698;
double r103705 = r103684 - r103690;
double r103706 = r103704 / r103705;
double r103707 = r103703 * r103706;
double r103708 = -1.0;
double r103709 = r103708 * r103677;
double r103710 = r103696 ? r103707 : r103709;
double r103711 = r103683 ? r103694 : r103710;
double r103712 = r103674 ? r103681 : r103711;
return r103712;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.5 |
| Herbie | 6.5 |
if b < -1.7431685240570133e+102Initial program 47.5
Taylor expanded around -inf 3.1
Simplified3.1
if -1.7431685240570133e+102 < b < 1.0417939395900796e-259Initial program 9.7
if 1.0417939395900796e-259 < b < 9.373511171447418e+103Initial program 34.9
rmApplied flip-+35.0
Simplified17.0
rmApplied *-un-lft-identity17.0
Applied *-un-lft-identity17.0
Applied times-frac17.0
Applied associate-/l*17.3
Simplified16.1
rmApplied associate-/l*16.1
Simplified8.3
rmApplied add-cube-cbrt8.3
Applied add-sqr-sqrt8.3
Applied times-frac8.3
Applied times-frac7.9
Simplified7.8
Simplified7.8
if 9.373511171447418e+103 < b Initial program 59.9
Taylor expanded around inf 2.3
Final simplification6.5
herbie shell --seed 2020024 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
: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)))