\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -2.6583684505465714 \cdot 10^{34} \lor \neg \left(x \le 5.3429144278201139 \cdot 10^{-89}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(\left(y - z\right) + 1\right)\\
\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 r899843 = x;
double r899844 = y;
double r899845 = z;
double r899846 = r899844 - r899845;
double r899847 = 1.0;
double r899848 = r899846 + r899847;
double r899849 = r899843 * r899848;
double r899850 = r899849 / r899845;
return r899850;
}
double f(double x, double y, double z) {
double r899851 = x;
double r899852 = -2.6583684505465714e+34;
bool r899853 = r899851 <= r899852;
double r899854 = 5.342914427820114e-89;
bool r899855 = r899851 <= r899854;
double r899856 = !r899855;
bool r899857 = r899853 || r899856;
double r899858 = z;
double r899859 = r899851 / r899858;
double r899860 = y;
double r899861 = r899860 - r899858;
double r899862 = 1.0;
double r899863 = r899861 + r899862;
double r899864 = r899859 * r899863;
double r899865 = r899851 * r899860;
double r899866 = r899865 / r899858;
double r899867 = fma(r899862, r899859, r899866);
double r899868 = r899867 - r899851;
double r899869 = r899857 ? r899864 : r899868;
return r899869;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
if x < -2.6583684505465714e+34 or 5.342914427820114e-89 < x Initial program 22.7
rmApplied associate-/l*0.4
rmApplied associate-/r/0.9
if -2.6583684505465714e+34 < x < 5.342914427820114e-89Initial program 0.3
Taylor expanded around 0 0.2
Simplified0.2
Final simplification0.5
herbie shell --seed 2020025 +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))