\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -20890976261.996433258056640625 \lor \neg \left(x \le 4.003006293405846964686451842961573369429 \cdot 10^{-55}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, 1, x \cdot \frac{y}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, 1, \frac{x \cdot y}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r484000 = x;
double r484001 = y;
double r484002 = z;
double r484003 = r484001 - r484002;
double r484004 = 1.0;
double r484005 = r484003 + r484004;
double r484006 = r484000 * r484005;
double r484007 = r484006 / r484002;
return r484007;
}
double f(double x, double y, double z) {
double r484008 = x;
double r484009 = -20890976261.996433;
bool r484010 = r484008 <= r484009;
double r484011 = 4.003006293405847e-55;
bool r484012 = r484008 <= r484011;
double r484013 = !r484012;
bool r484014 = r484010 || r484013;
double r484015 = z;
double r484016 = r484008 / r484015;
double r484017 = 1.0;
double r484018 = y;
double r484019 = r484018 / r484015;
double r484020 = r484008 * r484019;
double r484021 = fma(r484016, r484017, r484020);
double r484022 = r484021 - r484008;
double r484023 = r484008 * r484018;
double r484024 = r484023 / r484015;
double r484025 = fma(r484016, r484017, r484024);
double r484026 = r484025 - r484008;
double r484027 = r484014 ? r484022 : r484026;
return r484027;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 9.9 |
|---|---|
| Target | 0.5 |
| Herbie | 0.2 |
if x < -20890976261.996433 or 4.003006293405847e-55 < x Initial program 22.4
rmApplied associate-/l*0.2
Taylor expanded around 0 7.3
Simplified7.3
rmApplied *-un-lft-identity7.3
Applied times-frac0.3
Simplified0.3
if -20890976261.996433 < x < 4.003006293405847e-55Initial program 0.1
rmApplied associate-/l*5.6
Taylor expanded around 0 0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019212 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.7148310671343599e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.87410881643954616e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))