\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(\sqrt[3]{\frac{z}{t} \cdot \frac{z}{t}} \cdot \sqrt[3]{\frac{z}{t} \cdot \frac{z}{t}}\right) \cdot \sqrt[3]{\frac{z}{t} \cdot \frac{z}{t}}}double f(double x, double y, double z, double t) {
double r716763 = x;
double r716764 = r716763 * r716763;
double r716765 = y;
double r716766 = r716765 * r716765;
double r716767 = r716764 / r716766;
double r716768 = z;
double r716769 = r716768 * r716768;
double r716770 = t;
double r716771 = r716770 * r716770;
double r716772 = r716769 / r716771;
double r716773 = r716767 + r716772;
return r716773;
}
double f(double x, double y, double z, double t) {
double r716774 = x;
double r716775 = y;
double r716776 = r716774 / r716775;
double r716777 = fabs(r716776);
double r716778 = r716777 * r716777;
double r716779 = z;
double r716780 = t;
double r716781 = r716779 / r716780;
double r716782 = r716781 * r716781;
double r716783 = r716778 + r716782;
double r716784 = sqrt(r716783);
double r716785 = cbrt(r716782);
double r716786 = r716785 * r716785;
double r716787 = r716786 * r716785;
double r716788 = r716778 + r716787;
double r716789 = sqrt(r716788);
double r716790 = r716784 * r716789;
return r716790;
}




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.6 |
Initial program 33.5
rmApplied times-frac18.5
rmApplied add-sqr-sqrt18.5
Simplified18.5
Simplified0.4
rmApplied add-sqr-sqrt0.4
rmApplied add-cube-cbrt0.6
Final simplification0.6
herbie shell --seed 2019353
(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))))