\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -5.59946752196078414 \cdot 10^{-62}:\\
\;\;\;\;x \cdot \frac{1 + y}{z} - x\\
\mathbf{elif}\;z \le 2.95754151107119427 \cdot 10^{32}:\\
\;\;\;\;\frac{1}{\frac{z}{x \cdot \left(\left(y - z\right) + 1\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\end{array}double f(double x, double y, double z) {
double r963036 = x;
double r963037 = y;
double r963038 = z;
double r963039 = r963037 - r963038;
double r963040 = 1.0;
double r963041 = r963039 + r963040;
double r963042 = r963036 * r963041;
double r963043 = r963042 / r963038;
return r963043;
}
double f(double x, double y, double z) {
double r963044 = z;
double r963045 = -5.599467521960784e-62;
bool r963046 = r963044 <= r963045;
double r963047 = x;
double r963048 = 1.0;
double r963049 = y;
double r963050 = r963048 + r963049;
double r963051 = r963050 / r963044;
double r963052 = r963047 * r963051;
double r963053 = r963052 - r963047;
double r963054 = 2.9575415110711943e+32;
bool r963055 = r963044 <= r963054;
double r963056 = 1.0;
double r963057 = r963049 - r963044;
double r963058 = r963057 + r963048;
double r963059 = r963047 * r963058;
double r963060 = r963044 / r963059;
double r963061 = r963056 / r963060;
double r963062 = r963044 / r963058;
double r963063 = r963047 / r963062;
double r963064 = r963055 ? r963061 : r963063;
double r963065 = r963046 ? r963053 : r963064;
return r963065;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.3 |
if z < -5.599467521960784e-62Initial program 13.6
Taylor expanded around 0 5.1
Simplified2.3
rmApplied div-inv2.3
Applied associate-*l*0.4
Simplified0.4
if -5.599467521960784e-62 < z < 2.9575415110711943e+32Initial program 0.3
rmApplied clear-num0.5
if 2.9575415110711943e+32 < z Initial program 18.7
rmApplied associate-/l*0.1
Final simplification0.3
herbie shell --seed 2020042
(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))