\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(y + 1\right) - x\\
\mathbf{elif}\;x \le 8.649219799147649 \cdot 10^{-36}:\\
\;\;\;\;\left(\left(x \cdot y\right) \cdot \frac{1}{z} + \frac{x}{z} \cdot 1\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r788514 = x;
double r788515 = y;
double r788516 = z;
double r788517 = r788515 - r788516;
double r788518 = 1.0;
double r788519 = r788517 + r788518;
double r788520 = r788514 * r788519;
double r788521 = r788520 / r788516;
return r788521;
}
double f(double x, double y, double z) {
double r788522 = x;
double r788523 = -3.4374981009777875e+27;
bool r788524 = r788522 <= r788523;
double r788525 = z;
double r788526 = r788522 / r788525;
double r788527 = y;
double r788528 = 1.0;
double r788529 = r788527 + r788528;
double r788530 = r788526 * r788529;
double r788531 = r788530 - r788522;
double r788532 = 8.649219799147649e-36;
bool r788533 = r788522 <= r788532;
double r788534 = r788522 * r788527;
double r788535 = 1.0;
double r788536 = r788535 / r788525;
double r788537 = r788534 * r788536;
double r788538 = r788526 * r788528;
double r788539 = r788537 + r788538;
double r788540 = r788539 - r788522;
double r788541 = r788527 - r788525;
double r788542 = r788541 + r788528;
double r788543 = r788525 / r788542;
double r788544 = r788522 / r788543;
double r788545 = r788533 ? r788540 : r788544;
double r788546 = r788524 ? r788531 : r788545;
return r788546;
}




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
Simplified0.1
if -3.4374981009777875e+27 < x < 8.649219799147649e-36Initial program 0.3
Taylor expanded around 0 0.1
Simplified3.0
rmApplied distribute-lft-in3.0
Simplified0.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 +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))