\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -159.566156241908544:\\
\;\;\;\;\frac{x}{{\left(\frac{z}{\left(y - z\right) + 1}\right)}^{1}}\\
\mathbf{elif}\;z \le 8.26470253112780802 \cdot 10^{-8}:\\
\;\;\;\;1 \cdot \left(\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{\left(y - z\right) + 1}{z}\\
\end{array}double f(double x, double y, double z) {
double r719589 = x;
double r719590 = y;
double r719591 = z;
double r719592 = r719590 - r719591;
double r719593 = 1.0;
double r719594 = r719592 + r719593;
double r719595 = r719589 * r719594;
double r719596 = r719595 / r719591;
return r719596;
}
double f(double x, double y, double z) {
double r719597 = z;
double r719598 = -159.56615624190854;
bool r719599 = r719597 <= r719598;
double r719600 = x;
double r719601 = y;
double r719602 = r719601 - r719597;
double r719603 = 1.0;
double r719604 = r719602 + r719603;
double r719605 = r719597 / r719604;
double r719606 = 1.0;
double r719607 = pow(r719605, r719606);
double r719608 = r719600 / r719607;
double r719609 = 8.264702531127808e-08;
bool r719610 = r719597 <= r719609;
double r719611 = r719600 / r719597;
double r719612 = r719611 * r719604;
double r719613 = r719606 * r719612;
double r719614 = r719604 / r719597;
double r719615 = r719600 * r719614;
double r719616 = r719610 ? r719613 : r719615;
double r719617 = r719599 ? r719608 : r719616;
return r719617;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
if z < -159.56615624190854Initial program 17.1
rmApplied associate-/l*0.1
rmApplied pow10.1
if -159.56615624190854 < z < 8.264702531127808e-08Initial program 0.1
rmApplied associate-/l*8.5
rmApplied pow18.5
rmApplied *-un-lft-identity8.5
Applied *-un-lft-identity8.5
Applied times-frac8.5
Applied unpow-prod-down8.5
Applied *-un-lft-identity8.5
Applied times-frac8.5
Simplified8.5
Simplified0.1
if 8.264702531127808e-08 < z Initial program 16.3
rmApplied *-un-lft-identity16.3
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020060 +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))