\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\left(\sqrt[3]{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\frac{z}{t}, \frac{z}{t}, \frac{x}{y} \cdot \frac{x}{y}\right)}double f(double x, double y, double z, double t) {
double r2115086 = x;
double r2115087 = r2115086 * r2115086;
double r2115088 = y;
double r2115089 = r2115088 * r2115088;
double r2115090 = r2115087 / r2115089;
double r2115091 = z;
double r2115092 = r2115091 * r2115091;
double r2115093 = t;
double r2115094 = r2115093 * r2115093;
double r2115095 = r2115092 / r2115094;
double r2115096 = r2115090 + r2115095;
return r2115096;
}
double f(double x, double y, double z, double t) {
double r2115097 = z;
double r2115098 = t;
double r2115099 = r2115097 / r2115098;
double r2115100 = x;
double r2115101 = y;
double r2115102 = r2115100 / r2115101;
double r2115103 = r2115102 * r2115102;
double r2115104 = fma(r2115099, r2115099, r2115103);
double r2115105 = cbrt(r2115104);
double r2115106 = r2115105 * r2115105;
double r2115107 = r2115106 * r2115105;
return r2115107;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.6 |
|---|---|
| Target | 0.4 |
| Herbie | 1.2 |
Initial program 33.6
Simplified18.4
rmApplied times-frac0.4
rmApplied add-cube-cbrt1.2
Final simplification1.2
herbie shell --seed 2020018 +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))))