\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \sqrt{\left|\frac{z}{t}\right|} \cdot \left(\left|{\left(\left|\frac{z}{t}\right|\right)}^{\frac{3}{4}}\right| \cdot \left|{\left(\left|\frac{z}{t}\right|\right)}^{\frac{3}{4}}\right|\right)\right)double f(double x, double y, double z, double t) {
double r415220 = x;
double r415221 = r415220 * r415220;
double r415222 = y;
double r415223 = r415222 * r415222;
double r415224 = r415221 / r415223;
double r415225 = z;
double r415226 = r415225 * r415225;
double r415227 = t;
double r415228 = r415227 * r415227;
double r415229 = r415226 / r415228;
double r415230 = r415224 + r415229;
return r415230;
}
double f(double x, double y, double z, double t) {
double r415231 = x;
double r415232 = y;
double r415233 = r415231 / r415232;
double r415234 = z;
double r415235 = t;
double r415236 = r415234 / r415235;
double r415237 = fabs(r415236);
double r415238 = sqrt(r415237);
double r415239 = 0.75;
double r415240 = pow(r415237, r415239);
double r415241 = fabs(r415240);
double r415242 = r415241 * r415241;
double r415243 = r415238 * r415242;
double r415244 = fma(r415233, r415233, r415243);
return r415244;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 34.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
Initial program 34.3
Simplified19.8
rmApplied add-sqr-sqrt19.8
Simplified19.8
Simplified0.4
rmApplied add-sqr-sqrt0.5
Applied associate-*l*0.5
Simplified0.6
rmApplied pow1/20.6
Applied pow-pow0.5
Simplified0.5
rmApplied add-sqr-sqrt0.5
Simplified0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019235 +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))))