\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -29975784529430668.0:\\
\;\;\;\;\left(y + 1.0\right) \cdot \frac{x}{z} - x\\
\mathbf{elif}\;x \le 1.4441879214959917 \cdot 10^{-288}:\\
\;\;\;\;\left(\frac{y \cdot x}{z} + 1.0 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\left(y + 1.0\right) \cdot \frac{x}{z} - x\\
\end{array}double f(double x, double y, double z) {
double r33153805 = x;
double r33153806 = y;
double r33153807 = z;
double r33153808 = r33153806 - r33153807;
double r33153809 = 1.0;
double r33153810 = r33153808 + r33153809;
double r33153811 = r33153805 * r33153810;
double r33153812 = r33153811 / r33153807;
return r33153812;
}
double f(double x, double y, double z) {
double r33153813 = x;
double r33153814 = -29975784529430668.0;
bool r33153815 = r33153813 <= r33153814;
double r33153816 = y;
double r33153817 = 1.0;
double r33153818 = r33153816 + r33153817;
double r33153819 = z;
double r33153820 = r33153813 / r33153819;
double r33153821 = r33153818 * r33153820;
double r33153822 = r33153821 - r33153813;
double r33153823 = 1.4441879214959917e-288;
bool r33153824 = r33153813 <= r33153823;
double r33153825 = r33153816 * r33153813;
double r33153826 = r33153825 / r33153819;
double r33153827 = r33153817 * r33153820;
double r33153828 = r33153826 + r33153827;
double r33153829 = r33153828 - r33153813;
double r33153830 = r33153824 ? r33153829 : r33153822;
double r33153831 = r33153815 ? r33153822 : r33153830;
return r33153831;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.8 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if x < -29975784529430668.0 or 1.4441879214959917e-288 < x Initial program 14.6
rmApplied *-un-lft-identity14.6
Applied times-frac2.4
Simplified2.4
Taylor expanded around 0 5.0
Simplified1.0
if -29975784529430668.0 < x < 1.4441879214959917e-288Initial program 0.2
Taylor expanded around 0 0.1
Final simplification0.7
herbie shell --seed 2019163
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))