\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.089942740476039 \cdot 10^{+37}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.336295819707417 \cdot 10^{-25}:\\
\;\;\;\;\frac{\left(\sqrt{\mathsf{fma}\left(\left(-4 \cdot c\right), a, \left(b \cdot b\right)\right)} - b\right) \cdot \frac{1}{2}}{a}\\
\mathbf{elif}\;b \le 4.565612504171058 \cdot 10^{+134}:\\
\;\;\;\;\frac{\frac{a \cdot \left(-4 \cdot c\right)}{\frac{a}{\frac{1}{2}}}}{\sqrt{\mathsf{fma}\left(\left(-4 \cdot c\right), a, \left(b \cdot b\right)\right)} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4438656 = b;
double r4438657 = -r4438656;
double r4438658 = r4438656 * r4438656;
double r4438659 = 4.0;
double r4438660 = a;
double r4438661 = c;
double r4438662 = r4438660 * r4438661;
double r4438663 = r4438659 * r4438662;
double r4438664 = r4438658 - r4438663;
double r4438665 = sqrt(r4438664);
double r4438666 = r4438657 + r4438665;
double r4438667 = 2.0;
double r4438668 = r4438667 * r4438660;
double r4438669 = r4438666 / r4438668;
return r4438669;
}
double f(double a, double b, double c) {
double r4438670 = b;
double r4438671 = -5.089942740476039e+37;
bool r4438672 = r4438670 <= r4438671;
double r4438673 = c;
double r4438674 = r4438673 / r4438670;
double r4438675 = a;
double r4438676 = r4438670 / r4438675;
double r4438677 = r4438674 - r4438676;
double r4438678 = 1.336295819707417e-25;
bool r4438679 = r4438670 <= r4438678;
double r4438680 = -4.0;
double r4438681 = r4438680 * r4438673;
double r4438682 = r4438670 * r4438670;
double r4438683 = fma(r4438681, r4438675, r4438682);
double r4438684 = sqrt(r4438683);
double r4438685 = r4438684 - r4438670;
double r4438686 = 0.5;
double r4438687 = r4438685 * r4438686;
double r4438688 = r4438687 / r4438675;
double r4438689 = 4.565612504171058e+134;
bool r4438690 = r4438670 <= r4438689;
double r4438691 = r4438675 * r4438681;
double r4438692 = r4438675 / r4438686;
double r4438693 = r4438691 / r4438692;
double r4438694 = r4438684 + r4438670;
double r4438695 = r4438693 / r4438694;
double r4438696 = -r4438674;
double r4438697 = r4438690 ? r4438695 : r4438696;
double r4438698 = r4438679 ? r4438688 : r4438697;
double r4438699 = r4438672 ? r4438677 : r4438698;
return r4438699;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 10.6 |
if b < -5.089942740476039e+37Initial program 34.9
Simplified34.9
Taylor expanded around -inf 6.3
if -5.089942740476039e+37 < b < 1.336295819707417e-25Initial program 16.4
Simplified16.4
rmApplied *-un-lft-identity16.4
Applied div-inv16.4
Applied times-frac16.5
Simplified16.5
Simplified16.5
rmApplied associate-*r/16.4
if 1.336295819707417e-25 < b < 4.565612504171058e+134Initial program 47.3
Simplified47.3
rmApplied *-un-lft-identity47.3
Applied div-inv47.3
Applied times-frac47.3
Simplified47.4
Simplified47.4
rmApplied *-un-lft-identity47.4
Applied add-sqr-sqrt47.5
Applied times-frac47.4
Applied associate-*r*47.4
rmApplied flip--47.5
Applied associate-*l/47.5
Applied associate-*l/47.5
Simplified10.9
if 4.565612504171058e+134 < b Initial program 61.1
Simplified61.1
Taylor expanded around inf 2.2
Simplified2.2
Final simplification10.6
herbie shell --seed 2019121 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))