\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -4537181300022055465139962904576:\\
\;\;\;\;x \cdot \frac{\left(y - z\right) + 1}{z}\\
\mathbf{elif}\;z \le 10852378853767397241265820316179722403840:\\
\;\;\;\;\frac{x \cdot \left(y - z\right) + x \cdot 1}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r704149 = x;
double r704150 = y;
double r704151 = z;
double r704152 = r704150 - r704151;
double r704153 = 1.0;
double r704154 = r704152 + r704153;
double r704155 = r704149 * r704154;
double r704156 = r704155 / r704151;
return r704156;
}
double f(double x, double y, double z) {
double r704157 = z;
double r704158 = -4.5371813000220555e+30;
bool r704159 = r704157 <= r704158;
double r704160 = x;
double r704161 = y;
double r704162 = r704161 - r704157;
double r704163 = 1.0;
double r704164 = r704162 + r704163;
double r704165 = r704164 / r704157;
double r704166 = r704160 * r704165;
double r704167 = 1.0852378853767397e+40;
bool r704168 = r704157 <= r704167;
double r704169 = r704160 * r704162;
double r704170 = r704160 * r704163;
double r704171 = r704169 + r704170;
double r704172 = r704171 / r704157;
double r704173 = r704157 / r704164;
double r704174 = r704160 / r704173;
double r704175 = r704168 ? r704172 : r704174;
double r704176 = r704159 ? r704166 : r704175;
return r704176;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if z < -4.5371813000220555e+30Initial program 18.8
rmApplied *-un-lft-identity18.8
Applied times-frac0.1
Simplified0.1
if -4.5371813000220555e+30 < z < 1.0852378853767397e+40Initial program 0.3
rmApplied distribute-lft-in0.3
if 1.0852378853767397e+40 < z Initial program 19.2
rmApplied associate-/l*0.1
Final simplification0.2
herbie shell --seed 2020001
(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))