\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 -2.3202538172935113 \cdot 10^{68}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -1.5018009284516093 \cdot 10^{-154}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{elif}\;b \le 5.0268171554574348 \cdot 10^{125}:\\
\;\;\;\;\frac{1}{2} \cdot \left(4 \cdot \frac{c}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\right)\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r96636 = b;
double r96637 = -r96636;
double r96638 = r96636 * r96636;
double r96639 = 4.0;
double r96640 = a;
double r96641 = c;
double r96642 = r96640 * r96641;
double r96643 = r96639 * r96642;
double r96644 = r96638 - r96643;
double r96645 = sqrt(r96644);
double r96646 = r96637 + r96645;
double r96647 = 2.0;
double r96648 = r96647 * r96640;
double r96649 = r96646 / r96648;
return r96649;
}
double f(double a, double b, double c) {
double r96650 = b;
double r96651 = -2.3202538172935113e+68;
bool r96652 = r96650 <= r96651;
double r96653 = 1.0;
double r96654 = c;
double r96655 = r96654 / r96650;
double r96656 = a;
double r96657 = r96650 / r96656;
double r96658 = r96655 - r96657;
double r96659 = r96653 * r96658;
double r96660 = -1.5018009284516093e-154;
bool r96661 = r96650 <= r96660;
double r96662 = -r96650;
double r96663 = r96650 * r96650;
double r96664 = 4.0;
double r96665 = r96656 * r96654;
double r96666 = r96664 * r96665;
double r96667 = r96663 - r96666;
double r96668 = sqrt(r96667);
double r96669 = r96662 + r96668;
double r96670 = 1.0;
double r96671 = 2.0;
double r96672 = r96671 * r96656;
double r96673 = r96670 / r96672;
double r96674 = r96669 * r96673;
double r96675 = 5.026817155457435e+125;
bool r96676 = r96650 <= r96675;
double r96677 = r96670 / r96671;
double r96678 = r96662 - r96668;
double r96679 = r96654 / r96678;
double r96680 = r96664 * r96679;
double r96681 = r96677 * r96680;
double r96682 = -1.0;
double r96683 = r96682 * r96655;
double r96684 = r96676 ? r96681 : r96683;
double r96685 = r96661 ? r96674 : r96684;
double r96686 = r96652 ? r96659 : r96685;
return r96686;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.7 |
|---|---|
| Target | 20.9 |
| Herbie | 6.9 |
if b < -2.3202538172935113e+68Initial program 40.7
Taylor expanded around -inf 5.1
Simplified5.1
if -2.3202538172935113e+68 < b < -1.5018009284516093e-154Initial program 6.3
rmApplied div-inv6.5
if -1.5018009284516093e-154 < b < 5.026817155457435e+125Initial program 29.6
rmApplied flip-+29.9
Simplified16.7
rmApplied *-un-lft-identity16.7
Applied *-un-lft-identity16.7
Applied times-frac16.7
Applied times-frac16.7
Simplified16.7
Simplified21.4
rmApplied associate-/l*21.5
Simplified10.7
rmApplied div-inv10.7
Simplified10.4
if 5.026817155457435e+125 < b Initial program 61.6
Taylor expanded around inf 1.7
Final simplification6.9
herbie shell --seed 2020083
(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)))