\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -2.020892345540895412577476308946463194127 \cdot 10^{-80} \lor \neg \left(x \le 4.594502781479872539407817327237920661379 \cdot 10^{-108}\right):\\
\;\;\;\;\frac{x}{z} \cdot y + \left(1 \cdot \frac{x}{z} - x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\\
\end{array}double f(double x, double y, double z) {
double r436160 = x;
double r436161 = y;
double r436162 = z;
double r436163 = r436161 - r436162;
double r436164 = 1.0;
double r436165 = r436163 + r436164;
double r436166 = r436160 * r436165;
double r436167 = r436166 / r436162;
return r436167;
}
double f(double x, double y, double z) {
double r436168 = x;
double r436169 = -2.0208923455408954e-80;
bool r436170 = r436168 <= r436169;
double r436171 = 4.5945027814798725e-108;
bool r436172 = r436168 <= r436171;
double r436173 = !r436172;
bool r436174 = r436170 || r436173;
double r436175 = z;
double r436176 = r436168 / r436175;
double r436177 = y;
double r436178 = r436176 * r436177;
double r436179 = 1.0;
double r436180 = r436179 * r436176;
double r436181 = r436180 - r436168;
double r436182 = r436178 + r436181;
double r436183 = r436177 - r436175;
double r436184 = r436183 + r436179;
double r436185 = r436168 * r436184;
double r436186 = r436185 / r436175;
double r436187 = r436174 ? r436182 : r436186;
return r436187;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.2 |
if x < -2.0208923455408954e-80 or 4.5945027814798725e-108 < x Initial program 17.7
Taylor expanded around 0 5.9
Simplified0.2
rmApplied distribute-lft-in0.2
Applied associate--l+0.2
Simplified0.2
if -2.0208923455408954e-80 < x < 4.5945027814798725e-108Initial program 0.1
Final simplification0.2
herbie shell --seed 2019325 +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.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))