\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -1.462623845658977322749437144610251377998 \cdot 10^{-37}:\\
\;\;\;\;\left(1 \cdot \frac{x}{z} + \frac{x}{z} \cdot y\right) - x\\
\mathbf{elif}\;x \le 2.068539181220407868990844181630071705591 \cdot 10^{-54}:\\
\;\;\;\;\left(\frac{y \cdot x}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y - \left(z - 1\right)}{z}\\
\end{array}double f(double x, double y, double z) {
double r33111141 = x;
double r33111142 = y;
double r33111143 = z;
double r33111144 = r33111142 - r33111143;
double r33111145 = 1.0;
double r33111146 = r33111144 + r33111145;
double r33111147 = r33111141 * r33111146;
double r33111148 = r33111147 / r33111143;
return r33111148;
}
double f(double x, double y, double z) {
double r33111149 = x;
double r33111150 = -1.4626238456589773e-37;
bool r33111151 = r33111149 <= r33111150;
double r33111152 = 1.0;
double r33111153 = z;
double r33111154 = r33111149 / r33111153;
double r33111155 = r33111152 * r33111154;
double r33111156 = y;
double r33111157 = r33111154 * r33111156;
double r33111158 = r33111155 + r33111157;
double r33111159 = r33111158 - r33111149;
double r33111160 = 2.068539181220408e-54;
bool r33111161 = r33111149 <= r33111160;
double r33111162 = r33111156 * r33111149;
double r33111163 = r33111162 / r33111153;
double r33111164 = r33111163 + r33111155;
double r33111165 = r33111164 - r33111149;
double r33111166 = r33111153 - r33111152;
double r33111167 = r33111156 - r33111166;
double r33111168 = r33111167 / r33111153;
double r33111169 = r33111149 * r33111168;
double r33111170 = r33111161 ? r33111165 : r33111169;
double r33111171 = r33111151 ? r33111159 : r33111170;
return r33111171;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.0 |
|---|---|
| Target | 0.5 |
| Herbie | 0.2 |
if x < -1.4626238456589773e-37Initial program 22.2
rmApplied associate-/l*0.3
Taylor expanded around 0 7.6
Simplified0.1
if -1.4626238456589773e-37 < x < 2.068539181220408e-54Initial program 0.2
Taylor expanded around 0 0.1
if 2.068539181220408e-54 < x Initial program 19.8
rmApplied associate-/l*0.2
rmApplied div-inv0.4
Simplified0.4
Final simplification0.2
herbie shell --seed 2019168
(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))