\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -3.9021083944700275 \cdot 10^{-239} \lor \neg \left(x \le 1.5249655170051624 \cdot 10^{-193}\right):\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{z}{x \cdot \left(\left(y - z\right) + 1\right)}}\\
\end{array}double f(double x, double y, double z) {
double r710850 = x;
double r710851 = y;
double r710852 = z;
double r710853 = r710851 - r710852;
double r710854 = 1.0;
double r710855 = r710853 + r710854;
double r710856 = r710850 * r710855;
double r710857 = r710856 / r710852;
return r710857;
}
double f(double x, double y, double z) {
double r710858 = x;
double r710859 = -3.9021083944700275e-239;
bool r710860 = r710858 <= r710859;
double r710861 = 1.5249655170051624e-193;
bool r710862 = r710858 <= r710861;
double r710863 = !r710862;
bool r710864 = r710860 || r710863;
double r710865 = z;
double r710866 = r710858 / r710865;
double r710867 = 1.0;
double r710868 = y;
double r710869 = r710867 + r710868;
double r710870 = r710866 * r710869;
double r710871 = r710870 - r710858;
double r710872 = 1.0;
double r710873 = r710868 - r710865;
double r710874 = r710873 + r710867;
double r710875 = r710858 * r710874;
double r710876 = r710865 / r710875;
double r710877 = r710872 / r710876;
double r710878 = r710864 ? r710871 : r710877;
return r710878;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.6 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
if x < -3.9021083944700275e-239 or 1.5249655170051624e-193 < x Initial program 12.9
Taylor expanded around 0 4.3
Simplified0.6
if -3.9021083944700275e-239 < x < 1.5249655170051624e-193Initial program 0.2
rmApplied clear-num0.3
Final simplification0.6
herbie shell --seed 2020047
(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))