\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}0.5 \cdot \left(\left(y + x \cdot \frac{x}{y}\right) - \left(\sqrt[3]{\left|z\right| \cdot \frac{\left|z\right|}{y}} \cdot \sqrt[3]{\left|z\right| \cdot \frac{\left|z\right|}{y}}\right) \cdot \sqrt[3]{\left|z\right| \cdot \frac{\left|z\right|}{y}}\right)double f(double x, double y, double z) {
double r641046 = x;
double r641047 = r641046 * r641046;
double r641048 = y;
double r641049 = r641048 * r641048;
double r641050 = r641047 + r641049;
double r641051 = z;
double r641052 = r641051 * r641051;
double r641053 = r641050 - r641052;
double r641054 = 2.0;
double r641055 = r641048 * r641054;
double r641056 = r641053 / r641055;
return r641056;
}
double f(double x, double y, double z) {
double r641057 = 0.5;
double r641058 = y;
double r641059 = x;
double r641060 = r641059 / r641058;
double r641061 = r641059 * r641060;
double r641062 = r641058 + r641061;
double r641063 = z;
double r641064 = fabs(r641063);
double r641065 = r641064 / r641058;
double r641066 = r641064 * r641065;
double r641067 = cbrt(r641066);
double r641068 = r641067 * r641067;
double r641069 = r641068 * r641067;
double r641070 = r641062 - r641069;
double r641071 = r641057 * r641070;
return r641071;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 27.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
Initial program 27.7
Taylor expanded around 0 12.2
Simplified12.2
rmApplied *-un-lft-identity12.2
Applied add-sqr-sqrt38.5
Applied unpow-prod-down38.5
Applied times-frac35.5
Simplified35.5
Simplified6.4
rmApplied *-un-lft-identity6.4
Applied add-sqr-sqrt6.4
Applied times-frac6.4
Simplified6.4
Simplified0.2
rmApplied add-cube-cbrt0.4
Final simplification0.4
herbie shell --seed 2020100
(FPCore (x y z)
:name "Diagrams.TwoD.Apollonian:initialConfig from diagrams-contrib-1.3.0.5, A"
:precision binary64
:herbie-target
(- (* y 0.5) (* (* (/ 0.5 y) (+ z x)) (- z x)))
(/ (- (+ (* x x) (* y y)) (* z z)) (* y 2)))