\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -1.2174262221561359 \cdot 10^{-94} \lor \neg \left(x \le 1.12601737674282078 \cdot 10^{-171}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(\left(y - z\right) + 1\right)\right) \cdot \frac{1}{z}\\
\end{array}double f(double x, double y, double z) {
double r422809 = x;
double r422810 = y;
double r422811 = z;
double r422812 = r422810 - r422811;
double r422813 = 1.0;
double r422814 = r422812 + r422813;
double r422815 = r422809 * r422814;
double r422816 = r422815 / r422811;
return r422816;
}
double f(double x, double y, double z) {
double r422817 = x;
double r422818 = -1.217426222156136e-94;
bool r422819 = r422817 <= r422818;
double r422820 = 1.1260173767428208e-171;
bool r422821 = r422817 <= r422820;
double r422822 = !r422821;
bool r422823 = r422819 || r422822;
double r422824 = z;
double r422825 = r422817 / r422824;
double r422826 = 1.0;
double r422827 = y;
double r422828 = r422826 + r422827;
double r422829 = r422825 * r422828;
double r422830 = r422829 - r422817;
double r422831 = r422827 - r422824;
double r422832 = r422831 + r422826;
double r422833 = r422817 * r422832;
double r422834 = 1.0;
double r422835 = r422834 / r422824;
double r422836 = r422833 * r422835;
double r422837 = r422823 ? r422830 : r422836;
return r422837;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.2 |
|---|---|
| Target | 0.4 |
| Herbie | 0.3 |
if x < -1.217426222156136e-94 or 1.1260173767428208e-171 < x Initial program 15.5
Taylor expanded around 0 5.2
Simplified0.3
if -1.217426222156136e-94 < x < 1.1260173767428208e-171Initial program 0.2
rmApplied div-inv0.3
Final simplification0.3
herbie shell --seed 2020043 +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))