\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 -8.55528137777049654 \cdot 10^{140}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 5.08374808794434102 \cdot 10^{-70}:\\
\;\;\;\;\sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}} \cdot \frac{\sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}}{a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r74000 = b;
double r74001 = -r74000;
double r74002 = r74000 * r74000;
double r74003 = 4.0;
double r74004 = a;
double r74005 = c;
double r74006 = r74004 * r74005;
double r74007 = r74003 * r74006;
double r74008 = r74002 - r74007;
double r74009 = sqrt(r74008);
double r74010 = r74001 + r74009;
double r74011 = 2.0;
double r74012 = r74011 * r74004;
double r74013 = r74010 / r74012;
return r74013;
}
double f(double a, double b, double c) {
double r74014 = b;
double r74015 = -8.555281377770497e+140;
bool r74016 = r74014 <= r74015;
double r74017 = 1.0;
double r74018 = c;
double r74019 = r74018 / r74014;
double r74020 = a;
double r74021 = r74014 / r74020;
double r74022 = r74019 - r74021;
double r74023 = r74017 * r74022;
double r74024 = 5.083748087944341e-70;
bool r74025 = r74014 <= r74024;
double r74026 = r74014 * r74014;
double r74027 = 4.0;
double r74028 = r74020 * r74018;
double r74029 = r74027 * r74028;
double r74030 = r74026 - r74029;
double r74031 = sqrt(r74030);
double r74032 = r74031 - r74014;
double r74033 = 2.0;
double r74034 = r74032 / r74033;
double r74035 = sqrt(r74034);
double r74036 = r74035 / r74020;
double r74037 = r74035 * r74036;
double r74038 = -1.0;
double r74039 = r74038 * r74019;
double r74040 = r74025 ? r74037 : r74039;
double r74041 = r74016 ? r74023 : r74040;
return r74041;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.1 |
| Herbie | 10.0 |
if b < -8.555281377770497e+140Initial program 58.5
Simplified58.5
Taylor expanded around -inf 2.4
Simplified2.4
if -8.555281377770497e+140 < b < 5.083748087944341e-70Initial program 12.5
Simplified12.5
rmApplied *-un-lft-identity12.5
Applied add-sqr-sqrt13.0
Applied times-frac13.0
Simplified13.0
if 5.083748087944341e-70 < b Initial program 53.1
Simplified53.1
Taylor expanded around inf 8.7
Final simplification10.0
herbie shell --seed 2020046 +o rules:numerics
(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)))