\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le 3.5216806508699143 \cdot 10^{-102}:\\
\;\;\;\;\left(\left(x \cdot y\right) \cdot \frac{1}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(1 + y\right) - x\\
\end{array}double f(double x, double y, double z) {
double r909194 = x;
double r909195 = y;
double r909196 = z;
double r909197 = r909195 - r909196;
double r909198 = 1.0;
double r909199 = r909197 + r909198;
double r909200 = r909194 * r909199;
double r909201 = r909200 / r909196;
return r909201;
}
double f(double x, double y, double z) {
double r909202 = x;
double r909203 = 3.5216806508699143e-102;
bool r909204 = r909202 <= r909203;
double r909205 = y;
double r909206 = r909202 * r909205;
double r909207 = 1.0;
double r909208 = z;
double r909209 = r909207 / r909208;
double r909210 = r909206 * r909209;
double r909211 = 1.0;
double r909212 = r909202 / r909208;
double r909213 = r909211 * r909212;
double r909214 = r909210 + r909213;
double r909215 = r909214 - r909202;
double r909216 = r909211 + r909205;
double r909217 = r909212 * r909216;
double r909218 = r909217 - r909202;
double r909219 = r909204 ? r909215 : r909218;
return r909219;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.0 |
|---|---|
| Target | 0.5 |
| Herbie | 1.7 |
if x < 3.5216806508699143e-102Initial program 7.1
Taylor expanded around 0 2.3
rmApplied div-inv2.3
if 3.5216806508699143e-102 < x Initial program 17.1
Taylor expanded around 0 5.6
Taylor expanded around 0 5.6
Simplified0.3
Final simplification1.7
herbie shell --seed 2020035
(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))