\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\sqrt{\left|\frac{x}{y}\right| \cdot \left|\frac{x}{y}\right| + \frac{z}{t} \cdot \frac{z}{t}} \cdot \sqrt{\left|\frac{x}{y}\right| \cdot \left|\frac{x}{y}\right| + \left(\frac{z}{t} \cdot \left(\sqrt[3]{\frac{z}{t}} \cdot \sqrt[3]{\frac{z}{t}}\right)\right) \cdot \sqrt[3]{\frac{z}{t}}}double f(double x, double y, double z, double t) {
double r774844 = x;
double r774845 = r774844 * r774844;
double r774846 = y;
double r774847 = r774846 * r774846;
double r774848 = r774845 / r774847;
double r774849 = z;
double r774850 = r774849 * r774849;
double r774851 = t;
double r774852 = r774851 * r774851;
double r774853 = r774850 / r774852;
double r774854 = r774848 + r774853;
return r774854;
}
double f(double x, double y, double z, double t) {
double r774855 = x;
double r774856 = y;
double r774857 = r774855 / r774856;
double r774858 = fabs(r774857);
double r774859 = r774858 * r774858;
double r774860 = z;
double r774861 = t;
double r774862 = r774860 / r774861;
double r774863 = r774862 * r774862;
double r774864 = r774859 + r774863;
double r774865 = sqrt(r774864);
double r774866 = cbrt(r774862);
double r774867 = r774866 * r774866;
double r774868 = r774862 * r774867;
double r774869 = r774868 * r774866;
double r774870 = r774859 + r774869;
double r774871 = sqrt(r774870);
double r774872 = r774865 * r774871;
return r774872;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 33.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
Initial program 33.8
rmApplied times-frac20.0
rmApplied add-sqr-sqrt20.1
Simplified20.0
Simplified0.4
rmApplied add-sqr-sqrt0.4
rmApplied add-cube-cbrt0.6
Applied associate-*r*0.6
Final simplification0.6
herbie shell --seed 2020089
(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))))