\frac{x \cdot x}{y \cdot y} + \frac{z \cdot z}{t \cdot t}\sqrt{\left(\sqrt[3]{\frac{z}{t}} \cdot \left(\sqrt[3]{\frac{1}{t}} \cdot \sqrt[3]{z}\right)\right) \cdot \left(\sqrt[3]{\frac{z}{t}} \cdot \frac{z}{t}\right) + \frac{x}{y} \cdot \frac{x}{y}} \cdot \sqrt{\frac{x}{y} \cdot \frac{x}{y} + \frac{z}{t} \cdot \frac{z}{t}}double f(double x, double y, double z, double t) {
double r28014965 = x;
double r28014966 = r28014965 * r28014965;
double r28014967 = y;
double r28014968 = r28014967 * r28014967;
double r28014969 = r28014966 / r28014968;
double r28014970 = z;
double r28014971 = r28014970 * r28014970;
double r28014972 = t;
double r28014973 = r28014972 * r28014972;
double r28014974 = r28014971 / r28014973;
double r28014975 = r28014969 + r28014974;
return r28014975;
}
double f(double x, double y, double z, double t) {
double r28014976 = z;
double r28014977 = t;
double r28014978 = r28014976 / r28014977;
double r28014979 = cbrt(r28014978);
double r28014980 = 1.0;
double r28014981 = r28014980 / r28014977;
double r28014982 = cbrt(r28014981);
double r28014983 = cbrt(r28014976);
double r28014984 = r28014982 * r28014983;
double r28014985 = r28014979 * r28014984;
double r28014986 = r28014979 * r28014978;
double r28014987 = r28014985 * r28014986;
double r28014988 = x;
double r28014989 = y;
double r28014990 = r28014988 / r28014989;
double r28014991 = r28014990 * r28014990;
double r28014992 = r28014987 + r28014991;
double r28014993 = sqrt(r28014992);
double r28014994 = r28014978 * r28014978;
double r28014995 = r28014991 + r28014994;
double r28014996 = sqrt(r28014995);
double r28014997 = r28014993 * r28014996;
return r28014997;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 33.7 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
Initial program 33.7
Simplified0.4
rmApplied add-sqr-sqrt0.4
rmApplied add-cube-cbrt0.6
Applied associate-*l*0.6
rmApplied div-inv0.6
Applied cbrt-prod0.6
Final simplification0.6
herbie shell --seed 2019168
(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))))