\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 r511187 = x;
double r511188 = r511187 * r511187;
double r511189 = y;
double r511190 = r511189 * r511189;
double r511191 = r511188 / r511190;
double r511192 = z;
double r511193 = r511192 * r511192;
double r511194 = t;
double r511195 = r511194 * r511194;
double r511196 = r511193 / r511195;
double r511197 = r511191 + r511196;
return r511197;
}
double f(double x, double y, double z, double t) {
double r511198 = z;
double r511199 = t;
double r511200 = r511198 / r511199;
double r511201 = x;
double r511202 = y;
double r511203 = r511201 / r511202;
double r511204 = hypot(r511200, r511203);
double r511205 = r511204 * r511204;
return r511205;
}




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.4 |
Initial program 33.8
Simplified19.8
rmApplied add-sqr-sqrt19.8
Simplified19.8
Simplified0.4
Final simplification0.4
herbie shell --seed 2020062 +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))))