\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 r29548015 = x;
double r29548016 = y;
double r29548017 = z;
double r29548018 = r29548016 - r29548017;
double r29548019 = 1.0;
double r29548020 = r29548018 + r29548019;
double r29548021 = r29548015 * r29548020;
double r29548022 = r29548021 / r29548017;
return r29548022;
}
double f(double x, double y, double z) {
double r29548023 = x;
double r29548024 = -29975784529430668.0;
bool r29548025 = r29548023 <= r29548024;
double r29548026 = y;
double r29548027 = 1.0;
double r29548028 = r29548026 + r29548027;
double r29548029 = z;
double r29548030 = r29548023 / r29548029;
double r29548031 = r29548028 * r29548030;
double r29548032 = r29548031 - r29548023;
double r29548033 = 1.4441879214959917e-288;
bool r29548034 = r29548023 <= r29548033;
double r29548035 = r29548026 * r29548023;
double r29548036 = r29548035 / r29548029;
double r29548037 = r29548027 * r29548030;
double r29548038 = r29548036 + r29548037;
double r29548039 = r29548038 - r29548023;
double r29548040 = r29548034 ? r29548039 : r29548032;
double r29548041 = r29548025 ? r29548032 : r29548040;
return r29548041;
}




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))