\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\left(\sqrt{\mathsf{hypot}\left(\frac{x}{y}, \frac{z}{t}\right)} \cdot \sqrt{\mathsf{hypot}\left(\frac{x}{y}, \frac{z}{t}\right)}\right) \cdot \mathsf{hypot}\left(\frac{x}{y}, \frac{z}{t}\right)double f(double x, double y, double z, double t) {
double r369307 = x;
double r369308 = r369307 * r369307;
double r369309 = y;
double r369310 = r369309 * r369309;
double r369311 = r369308 / r369310;
double r369312 = z;
double r369313 = r369312 * r369312;
double r369314 = t;
double r369315 = r369314 * r369314;
double r369316 = r369313 / r369315;
double r369317 = r369311 + r369316;
return r369317;
}
double f(double x, double y, double z, double t) {
double r369318 = x;
double r369319 = y;
double r369320 = r369318 / r369319;
double r369321 = z;
double r369322 = t;
double r369323 = r369321 / r369322;
double r369324 = hypot(r369320, r369323);
double r369325 = sqrt(r369324);
double r369326 = r369325 * r369325;
double r369327 = r369326 * r369324;
return r369327;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 33.7 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
Initial program 33.7
Simplified19.4
rmApplied add-sqr-sqrt19.4
Simplified19.4
Simplified0.4
rmApplied add-sqr-sqrt0.6
Final simplification0.6
herbie shell --seed 2019325 +o rules:numerics
(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))))