\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -3.4374981009777875 \cdot 10^{27}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{elif}\;x \le 8.649219799147649 \cdot 10^{-36}:\\
\;\;\;\;\left(\left(x \cdot y\right) \cdot \frac{1}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r829537 = x;
double r829538 = y;
double r829539 = z;
double r829540 = r829538 - r829539;
double r829541 = 1.0;
double r829542 = r829540 + r829541;
double r829543 = r829537 * r829542;
double r829544 = r829543 / r829539;
return r829544;
}
double f(double x, double y, double z) {
double r829545 = x;
double r829546 = -3.4374981009777875e+27;
bool r829547 = r829545 <= r829546;
double r829548 = z;
double r829549 = r829545 / r829548;
double r829550 = 1.0;
double r829551 = y;
double r829552 = r829550 + r829551;
double r829553 = r829549 * r829552;
double r829554 = r829553 - r829545;
double r829555 = 8.649219799147649e-36;
bool r829556 = r829545 <= r829555;
double r829557 = r829545 * r829551;
double r829558 = 1.0;
double r829559 = r829558 / r829548;
double r829560 = r829557 * r829559;
double r829561 = r829550 * r829549;
double r829562 = r829560 + r829561;
double r829563 = r829562 - r829545;
double r829564 = r829551 - r829548;
double r829565 = r829564 + r829550;
double r829566 = r829548 / r829565;
double r829567 = r829545 / r829566;
double r829568 = r829556 ? r829563 : r829567;
double r829569 = r829547 ? r829554 : r829568;
return r829569;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -3.4374981009777875e+27Initial program 28.2
Taylor expanded around 0 9.1
Taylor expanded around 0 9.1
Simplified0.1
if -3.4374981009777875e+27 < x < 8.649219799147649e-36Initial program 0.3
Taylor expanded around 0 0.1
rmApplied div-inv0.1
if 8.649219799147649e-36 < x Initial program 21.3
rmApplied associate-/l*0.2
Final simplification0.1
herbie shell --seed 2020046
(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))