\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \left(\sqrt[3]{z} \cdot \sqrt[3]{\frac{1}{t}}\right) \cdot \left(\left(\sqrt[3]{\frac{z}{t}} \cdot \sqrt[3]{\frac{z}{t}}\right) \cdot \frac{z}{t}\right)\right)double f(double x, double y, double z, double t) {
double r23489798 = x;
double r23489799 = r23489798 * r23489798;
double r23489800 = y;
double r23489801 = r23489800 * r23489800;
double r23489802 = r23489799 / r23489801;
double r23489803 = z;
double r23489804 = r23489803 * r23489803;
double r23489805 = t;
double r23489806 = r23489805 * r23489805;
double r23489807 = r23489804 / r23489806;
double r23489808 = r23489802 + r23489807;
return r23489808;
}
double f(double x, double y, double z, double t) {
double r23489809 = x;
double r23489810 = y;
double r23489811 = r23489809 / r23489810;
double r23489812 = z;
double r23489813 = cbrt(r23489812);
double r23489814 = 1.0;
double r23489815 = t;
double r23489816 = r23489814 / r23489815;
double r23489817 = cbrt(r23489816);
double r23489818 = r23489813 * r23489817;
double r23489819 = r23489812 / r23489815;
double r23489820 = cbrt(r23489819);
double r23489821 = r23489820 * r23489820;
double r23489822 = r23489821 * r23489819;
double r23489823 = r23489818 * r23489822;
double r23489824 = fma(r23489811, r23489811, r23489823);
return r23489824;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.9 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
Initial program 33.9
Simplified0.4
rmApplied add-cube-cbrt0.8
Applied associate-*r*0.8
rmApplied div-inv0.8
Applied cbrt-prod0.7
Final simplification0.7
herbie shell --seed 2019171 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rasterific.Svg.PathConverter:arcToSegments from rasterific-svg-0.2.3.1"
:herbie-target
(+ (pow (/ x y) 2.0) (pow (/ z t) 2.0))
(+ (/ (* x x) (* y y)) (/ (* z z) (* t t))))