\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\left(\left(\sqrt{\sqrt[3]{\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \frac{\frac{z}{t}}{\frac{t}{z}}\right)}} \cdot \sqrt{\sqrt[3]{\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \frac{\frac{z}{t}}{\frac{t}{z}}\right)}}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \frac{\frac{z}{t}}{\frac{t}{z}}\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \frac{\frac{z}{t}}{\frac{t}{z}}\right)}double f(double x, double y, double z, double t) {
double r406355 = x;
double r406356 = r406355 * r406355;
double r406357 = y;
double r406358 = r406357 * r406357;
double r406359 = r406356 / r406358;
double r406360 = z;
double r406361 = r406360 * r406360;
double r406362 = t;
double r406363 = r406362 * r406362;
double r406364 = r406361 / r406363;
double r406365 = r406359 + r406364;
return r406365;
}
double f(double x, double y, double z, double t) {
double r406366 = x;
double r406367 = y;
double r406368 = r406366 / r406367;
double r406369 = z;
double r406370 = t;
double r406371 = r406369 / r406370;
double r406372 = r406370 / r406369;
double r406373 = r406371 / r406372;
double r406374 = fma(r406368, r406368, r406373);
double r406375 = cbrt(r406374);
double r406376 = sqrt(r406375);
double r406377 = r406376 * r406376;
double r406378 = r406377 * r406375;
double r406379 = r406378 * r406375;
return r406379;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 34.2 |
|---|---|
| Target | 0.4 |
| Herbie | 1.2 |
Initial program 34.2
Simplified19.4
rmApplied associate-/l*13.2
Simplified3.9
rmApplied associate-/r*0.4
rmApplied add-cube-cbrt1.2
rmApplied add-sqr-sqrt1.2
Final simplification1.2
herbie shell --seed 2019303 +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))))