\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -177405381332646206233773594524671541248:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\end{array}double f(double x, double y, double z) {
double r32244153 = x;
double r32244154 = y;
double r32244155 = z;
double r32244156 = r32244154 - r32244155;
double r32244157 = 1.0;
double r32244158 = r32244156 + r32244157;
double r32244159 = r32244153 * r32244158;
double r32244160 = r32244159 / r32244155;
return r32244160;
}
double f(double x, double y, double z) {
double r32244161 = z;
double r32244162 = -1.774053813326462e+38;
bool r32244163 = r32244161 <= r32244162;
double r32244164 = x;
double r32244165 = y;
double r32244166 = r32244165 - r32244161;
double r32244167 = 1.0;
double r32244168 = r32244166 + r32244167;
double r32244169 = r32244161 / r32244168;
double r32244170 = r32244164 / r32244169;
double r32244171 = r32244164 / r32244161;
double r32244172 = r32244167 + r32244165;
double r32244173 = r32244171 * r32244172;
double r32244174 = r32244173 - r32244164;
double r32244175 = r32244163 ? r32244170 : r32244174;
return r32244175;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.9 |
if z < -1.774053813326462e+38Initial program 18.4
rmApplied associate-/l*0.1
if -1.774053813326462e+38 < z Initial program 7.2
rmApplied *-un-lft-identity7.2
Applied times-frac4.8
Simplified4.8
Taylor expanded around 0 2.5
Simplified1.3
Final simplification0.9
herbie shell --seed 2019172
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1.0 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1.0 z)) (- (* (+ 1.0 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))