\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 r463852 = x;
double r463853 = r463852 * r463852;
double r463854 = y;
double r463855 = r463854 * r463854;
double r463856 = r463853 / r463855;
double r463857 = z;
double r463858 = r463857 * r463857;
double r463859 = t;
double r463860 = r463859 * r463859;
double r463861 = r463858 / r463860;
double r463862 = r463856 + r463861;
return r463862;
}
double f(double x, double y, double z, double t) {
double r463863 = x;
double r463864 = y;
double r463865 = r463863 / r463864;
double r463866 = z;
double r463867 = t;
double r463868 = r463866 / r463867;
double r463869 = r463867 / r463866;
double r463870 = r463868 / r463869;
double r463871 = fma(r463865, r463865, r463870);
double r463872 = cbrt(r463871);
double r463873 = sqrt(r463872);
double r463874 = r463873 * r463873;
double r463875 = r463874 * r463872;
double r463876 = r463875 * r463872;
return r463876;
}




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))))