\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}x - \left(\frac{\frac{y}{3}}{z} - \frac{\frac{1}{3}}{\frac{y}{\frac{t}{z}}}\right)double f(double x, double y, double z, double t) {
double r33505047 = x;
double r33505048 = y;
double r33505049 = z;
double r33505050 = 3.0;
double r33505051 = r33505049 * r33505050;
double r33505052 = r33505048 / r33505051;
double r33505053 = r33505047 - r33505052;
double r33505054 = t;
double r33505055 = r33505051 * r33505048;
double r33505056 = r33505054 / r33505055;
double r33505057 = r33505053 + r33505056;
return r33505057;
}
double f(double x, double y, double z, double t) {
double r33505058 = x;
double r33505059 = y;
double r33505060 = 3.0;
double r33505061 = r33505059 / r33505060;
double r33505062 = z;
double r33505063 = r33505061 / r33505062;
double r33505064 = 1.0;
double r33505065 = r33505064 / r33505060;
double r33505066 = t;
double r33505067 = r33505066 / r33505062;
double r33505068 = r33505059 / r33505067;
double r33505069 = r33505065 / r33505068;
double r33505070 = r33505063 - r33505069;
double r33505071 = r33505058 - r33505070;
return r33505071;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 3.9 |
|---|---|
| Target | 1.6 |
| Herbie | 1.6 |
Initial program 3.9
rmApplied associate-/r*1.6
rmApplied *-un-lft-identity1.6
Applied times-frac1.7
rmApplied associate-+l-1.7
Simplified1.6
rmApplied *-un-lft-identity1.6
Applied times-frac1.6
Applied associate-/l*1.6
Final simplification1.6
herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, H"
:herbie-target
(+ (- x (/ y (* z 3.0))) (/ (/ t (* z 3.0)) y))
(+ (- x (/ y (* z 3.0))) (/ t (* (* z 3.0) y))))