\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):\\
\;\;\;\;1 \cdot \frac{x}{z} + \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 r454105 = x;
double r454106 = y;
double r454107 = z;
double r454108 = r454106 - r454107;
double r454109 = 1.0;
double r454110 = r454108 + r454109;
double r454111 = r454105 * r454110;
double r454112 = r454111 / r454107;
return r454112;
}
double f(double x, double y, double z) {
double r454113 = x;
double r454114 = -2.0208923455408954e-80;
bool r454115 = r454113 <= r454114;
double r454116 = 4.5945027814798725e-108;
bool r454117 = r454113 <= r454116;
double r454118 = !r454117;
bool r454119 = r454115 || r454118;
double r454120 = 1.0;
double r454121 = z;
double r454122 = r454113 / r454121;
double r454123 = r454120 * r454122;
double r454124 = y;
double r454125 = r454122 * r454124;
double r454126 = r454125 - r454113;
double r454127 = r454123 + r454126;
double r454128 = r454124 - r454121;
double r454129 = r454128 + r454120;
double r454130 = r454113 * r454129;
double r454131 = r454130 / r454121;
double r454132 = r454119 ? r454127 : r454131;
return r454132;
}




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-rgt-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
(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))