\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 -5.674469085146396739103610609439188639717 \cdot 10^{110}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 7.061692521831335565675525372535211636164 \cdot 10^{-266}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)} - b}\\
\mathbf{elif}\;b \le 1.715181108188238274259588142060201574853 \cdot 10^{78}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r44968 = b;
double r44969 = -r44968;
double r44970 = r44968 * r44968;
double r44971 = 4.0;
double r44972 = a;
double r44973 = c;
double r44974 = r44972 * r44973;
double r44975 = r44971 * r44974;
double r44976 = r44970 - r44975;
double r44977 = sqrt(r44976);
double r44978 = r44969 - r44977;
double r44979 = 2.0;
double r44980 = r44979 * r44972;
double r44981 = r44978 / r44980;
return r44981;
}
double f(double a, double b, double c) {
double r44982 = b;
double r44983 = -5.674469085146397e+110;
bool r44984 = r44982 <= r44983;
double r44985 = -1.0;
double r44986 = c;
double r44987 = r44986 / r44982;
double r44988 = r44985 * r44987;
double r44989 = 7.061692521831336e-266;
bool r44990 = r44982 <= r44989;
double r44991 = 2.0;
double r44992 = r44991 * r44986;
double r44993 = 4.0;
double r44994 = a;
double r44995 = r44994 * r44986;
double r44996 = r44993 * r44995;
double r44997 = -r44996;
double r44998 = fma(r44982, r44982, r44997);
double r44999 = sqrt(r44998);
double r45000 = r44999 - r44982;
double r45001 = r44992 / r45000;
double r45002 = 1.7151811081882383e+78;
bool r45003 = r44982 <= r45002;
double r45004 = -r44982;
double r45005 = r44982 * r44982;
double r45006 = r45005 - r44996;
double r45007 = sqrt(r45006);
double r45008 = r45004 - r45007;
double r45009 = r44991 * r44994;
double r45010 = r45008 / r45009;
double r45011 = r44982 / r44994;
double r45012 = r44985 * r45011;
double r45013 = r45003 ? r45010 : r45012;
double r45014 = r44990 ? r45001 : r45013;
double r45015 = r44984 ? r44988 : r45014;
return r45015;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.9 |
|---|---|
| Target | 21.0 |
| Herbie | 6.7 |
if b < -5.674469085146397e+110Initial program 59.7
Taylor expanded around -inf 2.7
if -5.674469085146397e+110 < b < 7.061692521831336e-266Initial program 31.8
rmApplied flip--31.8
Simplified16.1
Simplified16.1
rmApplied div-inv16.1
rmApplied associate-*l/15.2
Simplified15.1
Taylor expanded around 0 8.7
if 7.061692521831336e-266 < b < 1.7151811081882383e+78Initial program 8.6
rmApplied *-un-lft-identity8.6
if 1.7151811081882383e+78 < b Initial program 43.0
rmApplied flip--62.6
Simplified61.8
Simplified61.8
Taylor expanded around 0 4.8
Final simplification6.7
herbie shell --seed 2019303 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))