\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -148408012023565.47:\\
\;\;\;\;\mathsf{fma}\left(1.0, \frac{x}{z}, \frac{y}{z} \cdot x - x\right)\\
\mathbf{elif}\;x \le 1.4441879214959917 \cdot 10^{-288}:\\
\;\;\;\;\frac{\left(1.0 + y\right) \cdot x}{z} - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1.0 + y\right) - x\\
\end{array}double f(double x, double y, double z) {
double r29933409 = x;
double r29933410 = y;
double r29933411 = z;
double r29933412 = r29933410 - r29933411;
double r29933413 = 1.0;
double r29933414 = r29933412 + r29933413;
double r29933415 = r29933409 * r29933414;
double r29933416 = r29933415 / r29933411;
return r29933416;
}
double f(double x, double y, double z) {
double r29933417 = x;
double r29933418 = -148408012023565.47;
bool r29933419 = r29933417 <= r29933418;
double r29933420 = 1.0;
double r29933421 = z;
double r29933422 = r29933417 / r29933421;
double r29933423 = y;
double r29933424 = r29933423 / r29933421;
double r29933425 = r29933424 * r29933417;
double r29933426 = r29933425 - r29933417;
double r29933427 = fma(r29933420, r29933422, r29933426);
double r29933428 = 1.4441879214959917e-288;
bool r29933429 = r29933417 <= r29933428;
double r29933430 = r29933420 + r29933423;
double r29933431 = r29933430 * r29933417;
double r29933432 = r29933431 / r29933421;
double r29933433 = r29933432 - r29933417;
double r29933434 = r29933422 * r29933430;
double r29933435 = r29933434 - r29933417;
double r29933436 = r29933429 ? r29933433 : r29933435;
double r29933437 = r29933419 ? r29933427 : r29933436;
return r29933437;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 9.8 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if x < -148408012023565.47Initial program 25.3
Taylor expanded around 0 8.9
Simplified0.1
if -148408012023565.47 < x < 1.4441879214959917e-288Initial program 0.2
Taylor expanded around 0 0.1
Simplified5.3
rmApplied div-inv5.4
Applied associate-*l*3.2
Simplified3.1
Taylor expanded around 0 0.1
Simplified3.1
rmApplied associate-*l/0.1
if 1.4441879214959917e-288 < x Initial program 10.4
Taylor expanded around 0 3.5
Simplified3.2
rmApplied div-inv3.2
Applied associate-*l*1.4
Simplified1.4
Taylor expanded around 0 3.5
Simplified1.4
Final simplification0.7
herbie shell --seed 2019163 +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))