\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]{\frac{z}{t}} \cdot \frac{z}{t}\right) \cdot \sqrt[3]{\frac{z}{t} \cdot \frac{z}{t}}\right)double f(double x, double y, double z, double t) {
double r15817185 = x;
double r15817186 = r15817185 * r15817185;
double r15817187 = y;
double r15817188 = r15817187 * r15817187;
double r15817189 = r15817186 / r15817188;
double r15817190 = z;
double r15817191 = r15817190 * r15817190;
double r15817192 = t;
double r15817193 = r15817192 * r15817192;
double r15817194 = r15817191 / r15817193;
double r15817195 = r15817189 + r15817194;
return r15817195;
}
double f(double x, double y, double z, double t) {
double r15817196 = x;
double r15817197 = y;
double r15817198 = r15817196 / r15817197;
double r15817199 = z;
double r15817200 = t;
double r15817201 = r15817199 / r15817200;
double r15817202 = cbrt(r15817201);
double r15817203 = r15817202 * r15817201;
double r15817204 = r15817201 * r15817201;
double r15817205 = cbrt(r15817204);
double r15817206 = r15817203 * r15817205;
double r15817207 = fma(r15817198, r15817198, r15817206);
return r15817207;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 33.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
Initial program 33.1
Simplified0.4
rmApplied add-cube-cbrt0.8
Applied associate-*l*0.8
rmApplied cbrt-unprod0.6
Final simplification0.6
herbie shell --seed 2019192 +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))))