\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\frac{x}{y} \cdot \frac{x}{y} + \left(\sqrt[3]{\frac{z}{t} \cdot \frac{z}{t}} \cdot \frac{z}{t}\right) \cdot \sqrt[3]{\frac{z}{t}}double f(double x, double y, double z, double t) {
double r22515120 = x;
double r22515121 = r22515120 * r22515120;
double r22515122 = y;
double r22515123 = r22515122 * r22515122;
double r22515124 = r22515121 / r22515123;
double r22515125 = z;
double r22515126 = r22515125 * r22515125;
double r22515127 = t;
double r22515128 = r22515127 * r22515127;
double r22515129 = r22515126 / r22515128;
double r22515130 = r22515124 + r22515129;
return r22515130;
}
double f(double x, double y, double z, double t) {
double r22515131 = x;
double r22515132 = y;
double r22515133 = r22515131 / r22515132;
double r22515134 = r22515133 * r22515133;
double r22515135 = z;
double r22515136 = t;
double r22515137 = r22515135 / r22515136;
double r22515138 = r22515137 * r22515137;
double r22515139 = cbrt(r22515138);
double r22515140 = r22515139 * r22515137;
double r22515141 = cbrt(r22515137);
double r22515142 = r22515140 * r22515141;
double r22515143 = r22515134 + r22515142;
return r22515143;
}




Bits error versus x




Bits error versus y




Bits error versus z




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