\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 -1.550162015746626746000974336574470460524 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.61145084478121505718169973575148582501 \cdot 10^{-34}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r70678 = b;
double r70679 = -r70678;
double r70680 = r70678 * r70678;
double r70681 = 4.0;
double r70682 = a;
double r70683 = c;
double r70684 = r70682 * r70683;
double r70685 = r70681 * r70684;
double r70686 = r70680 - r70685;
double r70687 = sqrt(r70686);
double r70688 = r70679 + r70687;
double r70689 = 2.0;
double r70690 = r70689 * r70682;
double r70691 = r70688 / r70690;
return r70691;
}
double f(double a, double b, double c) {
double r70692 = b;
double r70693 = -1.5501620157466267e+150;
bool r70694 = r70692 <= r70693;
double r70695 = 1.0;
double r70696 = c;
double r70697 = r70696 / r70692;
double r70698 = a;
double r70699 = r70692 / r70698;
double r70700 = r70697 - r70699;
double r70701 = r70695 * r70700;
double r70702 = 1.611450844781215e-34;
bool r70703 = r70692 <= r70702;
double r70704 = 1.0;
double r70705 = 2.0;
double r70706 = r70705 * r70698;
double r70707 = r70692 * r70692;
double r70708 = 4.0;
double r70709 = r70698 * r70696;
double r70710 = r70708 * r70709;
double r70711 = r70707 - r70710;
double r70712 = sqrt(r70711);
double r70713 = r70712 - r70692;
double r70714 = r70706 / r70713;
double r70715 = r70704 / r70714;
double r70716 = -1.0;
double r70717 = r70716 * r70697;
double r70718 = r70703 ? r70715 : r70717;
double r70719 = r70694 ? r70701 : r70718;
return r70719;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.2 |
| Herbie | 9.9 |
if b < -1.5501620157466267e+150Initial program 62.9
Simplified62.9
Taylor expanded around -inf 1.7
Simplified1.7
if -1.5501620157466267e+150 < b < 1.611450844781215e-34Initial program 13.6
Simplified13.6
rmApplied clear-num13.7
if 1.611450844781215e-34 < b Initial program 55.0
Simplified55.0
Taylor expanded around inf 7.0
Final simplification9.9
herbie shell --seed 2019325
(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)))