\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.847204280282031663920354805138023860461 \cdot 10^{48}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.407088231767797284873172100248652560848 \cdot 10^{-46}:\\
\;\;\;\;\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 r61089 = b;
double r61090 = -r61089;
double r61091 = r61089 * r61089;
double r61092 = 4.0;
double r61093 = a;
double r61094 = c;
double r61095 = r61093 * r61094;
double r61096 = r61092 * r61095;
double r61097 = r61091 - r61096;
double r61098 = sqrt(r61097);
double r61099 = r61090 + r61098;
double r61100 = 2.0;
double r61101 = r61100 * r61093;
double r61102 = r61099 / r61101;
return r61102;
}
double f(double a, double b, double c) {
double r61103 = b;
double r61104 = -2.8472042802820317e+48;
bool r61105 = r61103 <= r61104;
double r61106 = 1.0;
double r61107 = c;
double r61108 = r61107 / r61103;
double r61109 = a;
double r61110 = r61103 / r61109;
double r61111 = r61108 - r61110;
double r61112 = r61106 * r61111;
double r61113 = 1.4070882317677973e-46;
bool r61114 = r61103 <= r61113;
double r61115 = 1.0;
double r61116 = 2.0;
double r61117 = r61116 * r61109;
double r61118 = r61103 * r61103;
double r61119 = 4.0;
double r61120 = r61109 * r61107;
double r61121 = r61119 * r61120;
double r61122 = r61118 - r61121;
double r61123 = sqrt(r61122);
double r61124 = r61123 - r61103;
double r61125 = r61117 / r61124;
double r61126 = r61115 / r61125;
double r61127 = -1.0;
double r61128 = r61127 * r61108;
double r61129 = r61114 ? r61126 : r61128;
double r61130 = r61105 ? r61112 : r61129;
return r61130;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.6 |
| Herbie | 10.0 |
if b < -2.8472042802820317e+48Initial program 38.1
Simplified38.1
Taylor expanded around -inf 5.2
Simplified5.2
if -2.8472042802820317e+48 < b < 1.4070882317677973e-46Initial program 14.4
Simplified14.4
rmApplied clear-num14.5
if 1.4070882317677973e-46 < b Initial program 53.8
Simplified53.8
Taylor expanded around inf 7.2
Final simplification10.0
herbie shell --seed 2019212
(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)))