\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}0.5 \cdot \left(\left(y + \left|x\right| \cdot \frac{\left|x\right|}{y}\right) - \frac{1}{\frac{\frac{y}{z}}{z}}\right)double f(double x, double y, double z) {
double r734436 = x;
double r734437 = r734436 * r734436;
double r734438 = y;
double r734439 = r734438 * r734438;
double r734440 = r734437 + r734439;
double r734441 = z;
double r734442 = r734441 * r734441;
double r734443 = r734440 - r734442;
double r734444 = 2.0;
double r734445 = r734438 * r734444;
double r734446 = r734443 / r734445;
return r734446;
}
double f(double x, double y, double z) {
double r734447 = 0.5;
double r734448 = y;
double r734449 = x;
double r734450 = fabs(r734449);
double r734451 = r734450 / r734448;
double r734452 = r734450 * r734451;
double r734453 = r734448 + r734452;
double r734454 = 1.0;
double r734455 = z;
double r734456 = r734448 / r734455;
double r734457 = r734456 / r734455;
double r734458 = r734454 / r734457;
double r734459 = r734453 - r734458;
double r734460 = r734447 * r734459;
return r734460;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 28.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 28.5
Taylor expanded around 0 12.8
Simplified12.8
rmApplied unpow212.8
Applied associate-/l*6.9
rmApplied *-un-lft-identity6.9
Applied add-sqr-sqrt6.9
Applied times-frac6.9
Simplified6.9
Simplified0.2
rmApplied clear-num0.2
Final simplification0.2
herbie shell --seed 2020060 +o rules:numerics
(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)))