\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -1.894138962339348575688367605867883657369 \cdot 10^{-104}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{elif}\;x \le 5.333921896352304070857289463437993050447 \cdot 10^{-71}:\\
\;\;\;\;\frac{1}{z} \cdot \left(x \cdot \left(\left(y - z\right) + 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\end{array}double f(double x, double y, double z) {
double r413642 = x;
double r413643 = y;
double r413644 = z;
double r413645 = r413643 - r413644;
double r413646 = 1.0;
double r413647 = r413645 + r413646;
double r413648 = r413642 * r413647;
double r413649 = r413648 / r413644;
return r413649;
}
double f(double x, double y, double z) {
double r413650 = x;
double r413651 = -1.8941389623393486e-104;
bool r413652 = r413650 <= r413651;
double r413653 = z;
double r413654 = y;
double r413655 = r413654 - r413653;
double r413656 = 1.0;
double r413657 = r413655 + r413656;
double r413658 = r413653 / r413657;
double r413659 = r413650 / r413658;
double r413660 = 5.333921896352304e-71;
bool r413661 = r413650 <= r413660;
double r413662 = 1.0;
double r413663 = r413662 / r413653;
double r413664 = r413650 * r413657;
double r413665 = r413663 * r413664;
double r413666 = r413650 / r413653;
double r413667 = r413656 + r413654;
double r413668 = r413666 * r413667;
double r413669 = r413668 - r413650;
double r413670 = r413661 ? r413665 : r413669;
double r413671 = r413652 ? r413659 : r413670;
return r413671;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if x < -1.8941389623393486e-104Initial program 17.3
rmApplied associate-/l*0.9
if -1.8941389623393486e-104 < x < 5.333921896352304e-71Initial program 0.2
rmApplied associate-/l*6.9
rmApplied div-inv7.0
Applied *-un-lft-identity7.0
Applied times-frac0.3
Simplified0.3
if 5.333921896352304e-71 < x Initial program 19.4
Taylor expanded around 0 6.2
Simplified0.1
Final simplification0.4
herbie shell --seed 2019322
(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))