\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -5.04087632150993631 \cdot 10^{-30}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\mathbf{elif}\;x \le 3.8730830355980695 \cdot 10^{-51}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{\frac{z}{y}} + 1 \cdot \frac{x}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r708833 = x;
double r708834 = y;
double r708835 = z;
double r708836 = r708834 - r708835;
double r708837 = 1.0;
double r708838 = r708836 + r708837;
double r708839 = r708833 * r708838;
double r708840 = r708839 / r708835;
return r708840;
}
double f(double x, double y, double z) {
double r708841 = x;
double r708842 = -5.040876321509936e-30;
bool r708843 = r708841 <= r708842;
double r708844 = z;
double r708845 = r708841 / r708844;
double r708846 = 1.0;
double r708847 = y;
double r708848 = r708846 + r708847;
double r708849 = r708845 * r708848;
double r708850 = r708849 - r708841;
double r708851 = 3.8730830355980695e-51;
bool r708852 = r708841 <= r708851;
double r708853 = r708841 * r708847;
double r708854 = r708853 / r708844;
double r708855 = r708846 * r708845;
double r708856 = r708854 + r708855;
double r708857 = r708856 - r708841;
double r708858 = r708844 / r708847;
double r708859 = r708841 / r708858;
double r708860 = r708859 + r708855;
double r708861 = r708860 - r708841;
double r708862 = r708852 ? r708857 : r708861;
double r708863 = r708843 ? r708850 : r708862;
return r708863;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.0 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -5.040876321509936e-30Initial program 22.5
Taylor expanded around 0 8.4
Taylor expanded around 0 8.4
Simplified0.1
if -5.040876321509936e-30 < x < 3.8730830355980695e-51Initial program 0.1
Taylor expanded around 0 0.1
if 3.8730830355980695e-51 < x Initial program 20.6
Taylor expanded around 0 6.9
rmApplied associate-/l*0.3
Final simplification0.1
herbie shell --seed 2020024
(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))