\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 r33120621 = x;
double r33120622 = y;
double r33120623 = z;
double r33120624 = 3.0;
double r33120625 = r33120623 * r33120624;
double r33120626 = r33120622 / r33120625;
double r33120627 = r33120621 - r33120626;
double r33120628 = t;
double r33120629 = r33120625 * r33120622;
double r33120630 = r33120628 / r33120629;
double r33120631 = r33120627 + r33120630;
return r33120631;
}
double f(double x, double y, double z, double t) {
double r33120632 = x;
double r33120633 = y;
double r33120634 = 3.0;
double r33120635 = r33120633 / r33120634;
double r33120636 = z;
double r33120637 = r33120635 / r33120636;
double r33120638 = 1.0;
double r33120639 = r33120638 / r33120634;
double r33120640 = t;
double r33120641 = r33120640 / r33120636;
double r33120642 = r33120633 / r33120641;
double r33120643 = r33120639 / r33120642;
double r33120644 = r33120637 - r33120643;
double r33120645 = r33120632 - r33120644;
return r33120645;
}




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