\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 1 + \left(\frac{x}{z} \cdot y - 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 r426617 = x;
double r426618 = y;
double r426619 = z;
double r426620 = r426618 - r426619;
double r426621 = 1.0;
double r426622 = r426620 + r426621;
double r426623 = r426617 * r426622;
double r426624 = r426623 / r426619;
return r426624;
}
double f(double x, double y, double z) {
double r426625 = x;
double r426626 = -2.0208923455408954e-80;
bool r426627 = r426625 <= r426626;
double r426628 = 4.5945027814798725e-108;
bool r426629 = r426625 <= r426628;
double r426630 = !r426629;
bool r426631 = r426627 || r426630;
double r426632 = z;
double r426633 = r426625 / r426632;
double r426634 = 1.0;
double r426635 = r426633 * r426634;
double r426636 = y;
double r426637 = r426633 * r426636;
double r426638 = r426637 - r426625;
double r426639 = r426635 + r426638;
double r426640 = r426636 - r426632;
double r426641 = r426640 + r426634;
double r426642 = r426625 * r426641;
double r426643 = r426642 / r426632;
double r426644 = r426631 ? r426639 : r426643;
return r426644;
}




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
if -2.0208923455408954e-80 < x < 4.5945027814798725e-108Initial program 0.1
Final simplification0.2
herbie shell --seed 2019325
(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))