\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 r878229 = x;
double r878230 = r878229 * r878229;
double r878231 = y;
double r878232 = r878231 * r878231;
double r878233 = r878230 / r878232;
double r878234 = z;
double r878235 = r878234 * r878234;
double r878236 = t;
double r878237 = r878236 * r878236;
double r878238 = r878235 / r878237;
double r878239 = r878233 + r878238;
return r878239;
}
double f(double x, double y, double z, double t) {
double r878240 = x;
double r878241 = y;
double r878242 = r878240 / r878241;
double r878243 = fabs(r878242);
double r878244 = r878243 * r878243;
double r878245 = z;
double r878246 = t;
double r878247 = r878245 / r878246;
double r878248 = r878247 * r878247;
double r878249 = r878244 + r878248;
double r878250 = sqrt(r878249);
double r878251 = cbrt(r878248);
double r878252 = r878251 * r878251;
double r878253 = r878252 * r878251;
double r878254 = r878244 + r878253;
double r878255 = sqrt(r878254);
double r878256 = r878250 * r878255;
return r878256;
}




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))))