\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -2.6583684505465714 \cdot 10^{34} \lor \neg \left(x \le 5.3429144278201139 \cdot 10^{-89}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{z}, \frac{x \cdot y}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r3155 = x;
double r3156 = y;
double r3157 = z;
double r3158 = r3156 - r3157;
double r3159 = 1.0;
double r3160 = r3158 + r3159;
double r3161 = r3155 * r3160;
double r3162 = r3161 / r3157;
return r3162;
}
double f(double x, double y, double z) {
double r3163 = x;
double r3164 = -2.6583684505465714e+34;
bool r3165 = r3163 <= r3164;
double r3166 = 5.342914427820114e-89;
bool r3167 = r3163 <= r3166;
double r3168 = !r3167;
bool r3169 = r3165 || r3168;
double r3170 = z;
double r3171 = r3163 / r3170;
double r3172 = y;
double r3173 = r3172 - r3170;
double r3174 = 1.0;
double r3175 = r3173 + r3174;
double r3176 = r3171 * r3175;
double r3177 = r3163 * r3172;
double r3178 = r3177 / r3170;
double r3179 = fma(r3174, r3171, r3178);
double r3180 = r3179 - r3163;
double r3181 = r3169 ? r3176 : r3180;
return r3181;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
if x < -2.6583684505465714e+34 or 5.342914427820114e-89 < x Initial program 22.7
rmApplied associate-/l*0.4
rmApplied associate-/r/0.9
if -2.6583684505465714e+34 < x < 5.342914427820114e-89Initial program 0.3
Taylor expanded around 0 0.2
Simplified0.2
Final simplification0.5
herbie shell --seed 2020025 +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))