\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\left(\sqrt[3]{\left|\frac{x}{y}\right|} \cdot \sqrt[3]{\sqrt{\left|\frac{x}{y}\right|}}\right) \cdot {\left(\sqrt{\left|\frac{x}{y}\right|}\right)}^{3} + \left|\frac{z}{t}\right| \cdot \left|\frac{z}{t}\right|double f(double x, double y, double z, double t) {
double r452703 = x;
double r452704 = r452703 * r452703;
double r452705 = y;
double r452706 = r452705 * r452705;
double r452707 = r452704 / r452706;
double r452708 = z;
double r452709 = r452708 * r452708;
double r452710 = t;
double r452711 = r452710 * r452710;
double r452712 = r452709 / r452711;
double r452713 = r452707 + r452712;
return r452713;
}
double f(double x, double y, double z, double t) {
double r452714 = x;
double r452715 = y;
double r452716 = r452714 / r452715;
double r452717 = fabs(r452716);
double r452718 = cbrt(r452717);
double r452719 = sqrt(r452717);
double r452720 = cbrt(r452719);
double r452721 = r452718 * r452720;
double r452722 = 3.0;
double r452723 = pow(r452719, r452722);
double r452724 = r452721 * r452723;
double r452725 = z;
double r452726 = t;
double r452727 = r452725 / r452726;
double r452728 = fabs(r452727);
double r452729 = r452728 * r452728;
double r452730 = r452724 + r452729;
return r452730;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 33.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
Initial program 33.5
rmApplied add-sqr-sqrt33.5
Simplified33.5
Simplified19.0
rmApplied add-sqr-sqrt19.0
Simplified19.0
Simplified0.4
rmApplied add-sqr-sqrt0.5
Applied associate-*l*0.5
Simplified0.6
rmApplied add-cube-cbrt0.8
Simplified0.7
Final simplification0.7
herbie shell --seed 2019306
(FPCore (x y z t)
:name "Graphics.Rasterific.Svg.PathConverter:arcToSegments from rasterific-svg-0.2.3.1"
:precision binary64
:herbie-target
(+ (pow (/ x y) 2) (pow (/ z t) 2))
(+ (/ (* x x) (* y y)) (/ (* z z) (* t t))))