\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z} \le -6.579027488067199411550511935864463917316 \cdot 10^{210} \lor \neg \left(\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z} \le 3.530201563568855701403158383753448655305 \cdot 10^{90}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(y + 1\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(y + 1\right)}{z} - x\\
\end{array}double f(double x, double y, double z) {
double r438092 = x;
double r438093 = y;
double r438094 = z;
double r438095 = r438093 - r438094;
double r438096 = 1.0;
double r438097 = r438095 + r438096;
double r438098 = r438092 * r438097;
double r438099 = r438098 / r438094;
return r438099;
}
double f(double x, double y, double z) {
double r438100 = x;
double r438101 = y;
double r438102 = z;
double r438103 = r438101 - r438102;
double r438104 = 1.0;
double r438105 = r438103 + r438104;
double r438106 = r438100 * r438105;
double r438107 = r438106 / r438102;
double r438108 = -6.579027488067199e+210;
bool r438109 = r438107 <= r438108;
double r438110 = 3.5302015635688557e+90;
bool r438111 = r438107 <= r438110;
double r438112 = !r438111;
bool r438113 = r438109 || r438112;
double r438114 = r438100 / r438102;
double r438115 = r438101 + r438104;
double r438116 = r438114 * r438115;
double r438117 = r438116 - r438100;
double r438118 = r438100 * r438115;
double r438119 = r438118 / r438102;
double r438120 = r438119 - r438100;
double r438121 = r438113 ? r438117 : r438120;
return r438121;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.1 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if (/ (* x (+ (- y z) 1.0)) z) < -6.579027488067199e+210 or 3.5302015635688557e+90 < (/ (* x (+ (- y z) 1.0)) z) Initial program 27.9
Taylor expanded around 0 10.4
Simplified0.1
if -6.579027488067199e+210 < (/ (* x (+ (- y z) 1.0)) z) < 3.5302015635688557e+90Initial program 0.1
Taylor expanded around 0 0.1
Simplified2.7
rmApplied *-un-lft-identity2.7
Applied *-un-lft-identity2.7
Applied times-frac2.7
Applied associate-*l*2.7
Simplified0.1
Final simplification0.1
herbie shell --seed 2019326 +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))