\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \left(\frac{x}{y} \cdot \left(\frac{\sqrt[3]{x}}{\sqrt[3]{y}} \cdot \sqrt[3]{\frac{x}{y}}\right)\right) \cdot \sqrt[3]{\frac{x}{y}}\right)double f(double x, double y, double z, double t) {
double r596712 = x;
double r596713 = r596712 * r596712;
double r596714 = y;
double r596715 = r596714 * r596714;
double r596716 = r596713 / r596715;
double r596717 = z;
double r596718 = r596717 * r596717;
double r596719 = t;
double r596720 = r596719 * r596719;
double r596721 = r596718 / r596720;
double r596722 = r596716 + r596721;
return r596722;
}
double f(double x, double y, double z, double t) {
double r596723 = z;
double r596724 = t;
double r596725 = r596723 / r596724;
double r596726 = x;
double r596727 = y;
double r596728 = r596726 / r596727;
double r596729 = cbrt(r596726);
double r596730 = cbrt(r596727);
double r596731 = r596729 / r596730;
double r596732 = cbrt(r596728);
double r596733 = r596731 * r596732;
double r596734 = r596728 * r596733;
double r596735 = r596734 * r596732;
double r596736 = fma(r596725, r596725, r596735);
return r596736;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 34.0 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
Initial program 34.0
Simplified19.5
rmApplied times-frac0.4
rmApplied add-cube-cbrt0.8
Applied associate-*r*0.8
rmApplied cbrt-div0.7
Final simplification0.7
herbie shell --seed 2020081 +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))))