\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \left|\frac{z}{t}\right| \cdot \left|\frac{z}{t}\right|\right)double f(double x, double y, double z, double t) {
double r599349 = x;
double r599350 = r599349 * r599349;
double r599351 = y;
double r599352 = r599351 * r599351;
double r599353 = r599350 / r599352;
double r599354 = z;
double r599355 = r599354 * r599354;
double r599356 = t;
double r599357 = r599356 * r599356;
double r599358 = r599355 / r599357;
double r599359 = r599353 + r599358;
return r599359;
}
double f(double x, double y, double z, double t) {
double r599360 = x;
double r599361 = y;
double r599362 = r599360 / r599361;
double r599363 = z;
double r599364 = t;
double r599365 = r599363 / r599364;
double r599366 = fabs(r599365);
double r599367 = r599366 * r599366;
double r599368 = fma(r599362, r599362, r599367);
return r599368;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.7 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
Initial program 33.7
Simplified18.9
rmApplied add-sqr-sqrt18.9
Simplified18.9
Simplified0.4
Final simplification0.4
herbie shell --seed 2020046 +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))))