\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\frac{x}{y} \cdot \frac{x}{y} + \sqrt{\left|\frac{z}{t}\right|} \cdot \left(\sqrt{\left|\frac{z}{t}\right|} \cdot \left|\frac{z}{t}\right|\right)double f(double x, double y, double z, double t) {
double r440020 = x;
double r440021 = r440020 * r440020;
double r440022 = y;
double r440023 = r440022 * r440022;
double r440024 = r440021 / r440023;
double r440025 = z;
double r440026 = r440025 * r440025;
double r440027 = t;
double r440028 = r440027 * r440027;
double r440029 = r440026 / r440028;
double r440030 = r440024 + r440029;
return r440030;
}
double f(double x, double y, double z, double t) {
double r440031 = x;
double r440032 = y;
double r440033 = r440031 / r440032;
double r440034 = r440033 * r440033;
double r440035 = z;
double r440036 = t;
double r440037 = r440035 / r440036;
double r440038 = fabs(r440037);
double r440039 = sqrt(r440038);
double r440040 = r440039 * r440038;
double r440041 = r440039 * r440040;
double r440042 = r440034 + r440041;
return r440042;
}




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.5 |
Initial program 33.8
rmApplied add-sqr-sqrt33.8
Simplified33.8
Simplified19.4
rmApplied times-frac0.4
rmApplied add-sqr-sqrt0.5
Applied associate-*l*0.5
Simplified0.6
rmApplied cube-mult0.6
Simplified0.5
Final simplification0.5
herbie shell --seed 2019305
(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))))