\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.361733299857302083043096878302889042354 \cdot 10^{105}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.320360656741600748358420677927629618815 \cdot 10^{-289}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - a \cdot \left(4 \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 6.326287366549382745037046972324082366467 \cdot 10^{74}:\\
\;\;\;\;\frac{2 \cdot c}{\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 r70970 = b;
double r70971 = -r70970;
double r70972 = r70970 * r70970;
double r70973 = 4.0;
double r70974 = a;
double r70975 = c;
double r70976 = r70974 * r70975;
double r70977 = r70973 * r70976;
double r70978 = r70972 - r70977;
double r70979 = sqrt(r70978);
double r70980 = r70971 + r70979;
double r70981 = 2.0;
double r70982 = r70981 * r70974;
double r70983 = r70980 / r70982;
return r70983;
}
double f(double a, double b, double c) {
double r70984 = b;
double r70985 = -1.361733299857302e+105;
bool r70986 = r70984 <= r70985;
double r70987 = 1.0;
double r70988 = c;
double r70989 = r70988 / r70984;
double r70990 = a;
double r70991 = r70984 / r70990;
double r70992 = r70989 - r70991;
double r70993 = r70987 * r70992;
double r70994 = -3.3203606567416007e-289;
bool r70995 = r70984 <= r70994;
double r70996 = -r70984;
double r70997 = r70984 * r70984;
double r70998 = 4.0;
double r70999 = r70998 * r70988;
double r71000 = r70990 * r70999;
double r71001 = r70997 - r71000;
double r71002 = sqrt(r71001);
double r71003 = r70996 + r71002;
double r71004 = 2.0;
double r71005 = r71004 * r70990;
double r71006 = r71003 / r71005;
double r71007 = 6.326287366549383e+74;
bool r71008 = r70984 <= r71007;
double r71009 = r71004 * r70988;
double r71010 = r70990 * r70988;
double r71011 = r70998 * r71010;
double r71012 = r70997 - r71011;
double r71013 = sqrt(r71012);
double r71014 = r70996 - r71013;
double r71015 = r71009 / r71014;
double r71016 = -1.0;
double r71017 = r71016 * r70989;
double r71018 = r71008 ? r71015 : r71017;
double r71019 = r70995 ? r71006 : r71018;
double r71020 = r70986 ? r70993 : r71019;
return r71020;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 21.1 |
| Herbie | 6.8 |
if b < -1.361733299857302e+105Initial program 48.6
Taylor expanded around -inf 3.6
Simplified3.6
if -1.361733299857302e+105 < b < -3.3203606567416007e-289Initial program 8.5
Taylor expanded around 0 8.5
Simplified8.5
if -3.3203606567416007e-289 < b < 6.326287366549383e+74Initial program 29.9
rmApplied flip-+29.9
Simplified16.2
rmApplied *-un-lft-identity16.2
Applied *-un-lft-identity16.2
Applied times-frac16.2
Applied associate-/l*16.3
Simplified15.8
rmApplied associate-/r*15.6
Simplified9.4
Taylor expanded around 0 9.4
if 6.326287366549383e+74 < b Initial program 58.0
Taylor expanded around inf 3.7
Final simplification6.8
herbie shell --seed 2019322
(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)))