\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -4537181300022055465139962904576:\\
\;\;\;\;x \cdot \frac{\left(y - z\right) + 1}{z}\\
\mathbf{elif}\;z \le 10852378853767397241265820316179722403840:\\
\;\;\;\;\frac{x \cdot \left(y - z\right) + x \cdot 1}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r697781 = x;
double r697782 = y;
double r697783 = z;
double r697784 = r697782 - r697783;
double r697785 = 1.0;
double r697786 = r697784 + r697785;
double r697787 = r697781 * r697786;
double r697788 = r697787 / r697783;
return r697788;
}
double f(double x, double y, double z) {
double r697789 = z;
double r697790 = -4.5371813000220555e+30;
bool r697791 = r697789 <= r697790;
double r697792 = x;
double r697793 = y;
double r697794 = r697793 - r697789;
double r697795 = 1.0;
double r697796 = r697794 + r697795;
double r697797 = r697796 / r697789;
double r697798 = r697792 * r697797;
double r697799 = 1.0852378853767397e+40;
bool r697800 = r697789 <= r697799;
double r697801 = r697792 * r697794;
double r697802 = r697792 * r697795;
double r697803 = r697801 + r697802;
double r697804 = r697803 / r697789;
double r697805 = r697789 / r697796;
double r697806 = r697792 / r697805;
double r697807 = r697800 ? r697804 : r697806;
double r697808 = r697791 ? r697798 : r697807;
return r697808;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if z < -4.5371813000220555e+30Initial program 18.8
rmApplied *-un-lft-identity18.8
Applied times-frac0.1
Simplified0.1
if -4.5371813000220555e+30 < z < 1.0852378853767397e+40Initial program 0.3
rmApplied distribute-lft-in0.3
if 1.0852378853767397e+40 < z Initial program 19.2
rmApplied associate-/l*0.1
Final simplification0.2
herbie shell --seed 2020001
(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))