\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \left(\left|\frac{z}{t}\right| \cdot \sqrt{\left|\frac{z}{t}\right|}\right) \cdot \sqrt{\left|\frac{z}{t}\right|}\right)double f(double x, double y, double z, double t) {
double r413309 = x;
double r413310 = r413309 * r413309;
double r413311 = y;
double r413312 = r413311 * r413311;
double r413313 = r413310 / r413312;
double r413314 = z;
double r413315 = r413314 * r413314;
double r413316 = t;
double r413317 = r413316 * r413316;
double r413318 = r413315 / r413317;
double r413319 = r413313 + r413318;
return r413319;
}
double f(double x, double y, double z, double t) {
double r413320 = x;
double r413321 = y;
double r413322 = r413320 / r413321;
double r413323 = z;
double r413324 = t;
double r413325 = r413323 / r413324;
double r413326 = fabs(r413325);
double r413327 = sqrt(r413326);
double r413328 = r413326 * r413327;
double r413329 = r413328 * r413327;
double r413330 = fma(r413322, r413322, r413329);
return r413330;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.8 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
Initial program 33.8
Simplified18.9
rmApplied add-sqr-sqrt18.9
Simplified18.9
Simplified0.4
rmApplied add-sqr-sqrt0.5
Applied associate-*r*0.5
Simplified0.5
rmApplied add-cube-cbrt0.8
Simplified0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019304 +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))))