\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\left(x + \frac{y}{t - \frac{x}{z}}\right) - \frac{1}{\sqrt[3]{t \cdot z - x} \cdot \sqrt[3]{t \cdot z - x}} \cdot \frac{x}{\sqrt[3]{t \cdot z - x}}}{x + 1}double f(double x, double y, double z, double t) {
double r647683 = x;
double r647684 = y;
double r647685 = z;
double r647686 = r647684 * r647685;
double r647687 = r647686 - r647683;
double r647688 = t;
double r647689 = r647688 * r647685;
double r647690 = r647689 - r647683;
double r647691 = r647687 / r647690;
double r647692 = r647683 + r647691;
double r647693 = 1.0;
double r647694 = r647683 + r647693;
double r647695 = r647692 / r647694;
return r647695;
}
double f(double x, double y, double z, double t) {
double r647696 = x;
double r647697 = y;
double r647698 = t;
double r647699 = z;
double r647700 = r647696 / r647699;
double r647701 = r647698 - r647700;
double r647702 = r647697 / r647701;
double r647703 = r647696 + r647702;
double r647704 = 1.0;
double r647705 = r647698 * r647699;
double r647706 = r647705 - r647696;
double r647707 = cbrt(r647706);
double r647708 = r647707 * r647707;
double r647709 = r647704 / r647708;
double r647710 = r647696 / r647707;
double r647711 = r647709 * r647710;
double r647712 = r647703 - r647711;
double r647713 = 1.0;
double r647714 = r647696 + r647713;
double r647715 = r647712 / r647714;
return r647715;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.9 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 6.9
rmApplied div-sub6.9
Applied associate-+r-6.9
rmApplied associate-/l*2.2
Taylor expanded around 0 0.3
rmApplied add-cube-cbrt0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Final simplification0.4
herbie shell --seed 2020045
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))