\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -7.983591363170175 \cdot 10^{-179}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, 1.0 \cdot \frac{x}{z} - x\right)\\
\mathbf{elif}\;x \le 5.0221248808098915 \cdot 10^{-179}:\\
\;\;\;\;\frac{\left(\left(y + 1.0\right) - z\right) \cdot x}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{1.0 + \left(y - z\right)}}\\
\end{array}double f(double x, double y, double z) {
double r29854265 = x;
double r29854266 = y;
double r29854267 = z;
double r29854268 = r29854266 - r29854267;
double r29854269 = 1.0;
double r29854270 = r29854268 + r29854269;
double r29854271 = r29854265 * r29854270;
double r29854272 = r29854271 / r29854267;
return r29854272;
}
double f(double x, double y, double z) {
double r29854273 = x;
double r29854274 = -7.983591363170175e-179;
bool r29854275 = r29854273 <= r29854274;
double r29854276 = z;
double r29854277 = r29854273 / r29854276;
double r29854278 = y;
double r29854279 = 1.0;
double r29854280 = r29854279 * r29854277;
double r29854281 = r29854280 - r29854273;
double r29854282 = fma(r29854277, r29854278, r29854281);
double r29854283 = 5.0221248808098915e-179;
bool r29854284 = r29854273 <= r29854283;
double r29854285 = r29854278 + r29854279;
double r29854286 = r29854285 - r29854276;
double r29854287 = r29854286 * r29854273;
double r29854288 = r29854287 / r29854276;
double r29854289 = r29854278 - r29854276;
double r29854290 = r29854279 + r29854289;
double r29854291 = r29854276 / r29854290;
double r29854292 = r29854273 / r29854291;
double r29854293 = r29854284 ? r29854288 : r29854292;
double r29854294 = r29854275 ? r29854282 : r29854293;
return r29854294;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 9.4 |
|---|---|
| Target | 0.5 |
| Herbie | 0.8 |
if x < -7.983591363170175e-179Initial program 13.0
rmApplied associate-/l*1.7
Taylor expanded around 0 4.5
Simplified0.6
if -7.983591363170175e-179 < x < 5.0221248808098915e-179Initial program 0.1
rmApplied associate-/l*7.7
rmApplied div-inv7.8
Applied *-un-lft-identity7.8
Applied times-frac0.3
Simplified0.4
rmApplied associate-*l/0.1
Simplified0.1
if 5.0221248808098915e-179 < x Initial program 12.6
rmApplied associate-/l*1.5
Final simplification0.8
herbie shell --seed 2019168 +o rules:numerics
(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 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))