\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.547666603636537260513437138645901028344 \cdot 10^{50}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 7.455592343308264166675918758902222662503 \cdot 10^{-170}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r82102 = b;
double r82103 = -r82102;
double r82104 = r82102 * r82102;
double r82105 = 4.0;
double r82106 = a;
double r82107 = c;
double r82108 = r82106 * r82107;
double r82109 = r82105 * r82108;
double r82110 = r82104 - r82109;
double r82111 = sqrt(r82110);
double r82112 = r82103 + r82111;
double r82113 = 2.0;
double r82114 = r82113 * r82106;
double r82115 = r82112 / r82114;
return r82115;
}
double f(double a, double b, double c) {
double r82116 = b;
double r82117 = -1.5476666036365373e+50;
bool r82118 = r82116 <= r82117;
double r82119 = 1.0;
double r82120 = c;
double r82121 = r82120 / r82116;
double r82122 = a;
double r82123 = r82116 / r82122;
double r82124 = r82121 - r82123;
double r82125 = r82119 * r82124;
double r82126 = 7.455592343308264e-170;
bool r82127 = r82116 <= r82126;
double r82128 = 1.0;
double r82129 = 2.0;
double r82130 = r82129 * r82122;
double r82131 = -r82116;
double r82132 = r82116 * r82116;
double r82133 = 4.0;
double r82134 = r82122 * r82120;
double r82135 = r82133 * r82134;
double r82136 = r82132 - r82135;
double r82137 = sqrt(r82136);
double r82138 = r82131 + r82137;
double r82139 = r82130 / r82138;
double r82140 = r82128 / r82139;
double r82141 = -1.0;
double r82142 = r82141 * r82121;
double r82143 = r82127 ? r82140 : r82142;
double r82144 = r82118 ? r82125 : r82143;
return r82144;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 20.8 |
| Herbie | 11.9 |
if b < -1.5476666036365373e+50Initial program 37.8
Taylor expanded around -inf 5.8
Simplified5.8
if -1.5476666036365373e+50 < b < 7.455592343308264e-170Initial program 12.4
rmApplied clear-num12.5
if 7.455592343308264e-170 < b Initial program 48.9
Taylor expanded around inf 14.1
Final simplification11.9
herbie shell --seed 2019323
(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)))