\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{hypot}\left(\frac{z}{t}, \frac{x}{y}\right) \cdot \mathsf{hypot}\left(\frac{z}{t}, \frac{x}{y}\right)double f(double x, double y, double z, double t) {
double r947005 = x;
double r947006 = r947005 * r947005;
double r947007 = y;
double r947008 = r947007 * r947007;
double r947009 = r947006 / r947008;
double r947010 = z;
double r947011 = r947010 * r947010;
double r947012 = t;
double r947013 = r947012 * r947012;
double r947014 = r947011 / r947013;
double r947015 = r947009 + r947014;
return r947015;
}
double f(double x, double y, double z, double t) {
double r947016 = z;
double r947017 = t;
double r947018 = r947016 / r947017;
double r947019 = x;
double r947020 = y;
double r947021 = r947019 / r947020;
double r947022 = hypot(r947018, r947021);
double r947023 = r947022 * r947022;
return r947023;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 33.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
Initial program 33.4
Simplified19.0
rmApplied add-sqr-sqrt19.1
Simplified19.0
Simplified0.4
Final simplification0.4
herbie shell --seed 2019362 +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))))