\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -1.4723758122722615 \cdot 10^{110} \lor \neg \left(x \le 1.8053743254521745 \cdot 10^{-20}\right):\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{z}, \frac{x \cdot y}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r565686 = x;
double r565687 = y;
double r565688 = z;
double r565689 = r565687 - r565688;
double r565690 = 1.0;
double r565691 = r565689 + r565690;
double r565692 = r565686 * r565691;
double r565693 = r565692 / r565688;
return r565693;
}
double f(double x, double y, double z) {
double r565694 = x;
double r565695 = -1.4723758122722615e+110;
bool r565696 = r565694 <= r565695;
double r565697 = 1.8053743254521745e-20;
bool r565698 = r565694 <= r565697;
double r565699 = !r565698;
bool r565700 = r565696 || r565699;
double r565701 = z;
double r565702 = y;
double r565703 = r565702 - r565701;
double r565704 = 1.0;
double r565705 = r565703 + r565704;
double r565706 = r565701 / r565705;
double r565707 = r565694 / r565706;
double r565708 = r565694 / r565701;
double r565709 = r565694 * r565702;
double r565710 = r565709 / r565701;
double r565711 = fma(r565704, r565708, r565710);
double r565712 = r565711 - r565694;
double r565713 = r565700 ? r565707 : r565712;
return r565713;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.6 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if x < -1.4723758122722615e+110 or 1.8053743254521745e-20 < x Initial program 29.4
rmApplied associate-/l*0.1
if -1.4723758122722615e+110 < x < 1.8053743254521745e-20Initial program 1.5
rmApplied associate-/l*4.4
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.4
herbie shell --seed 2020027 +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))