\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\frac{y - \left(z + x\right) \cdot \frac{z - x}{y}}{2}double f(double x, double y, double z) {
double r382314 = x;
double r382315 = r382314 * r382314;
double r382316 = y;
double r382317 = r382316 * r382316;
double r382318 = r382315 + r382317;
double r382319 = z;
double r382320 = r382319 * r382319;
double r382321 = r382318 - r382320;
double r382322 = 2.0;
double r382323 = r382316 * r382322;
double r382324 = r382321 / r382323;
return r382324;
}
double f(double x, double y, double z) {
double r382325 = y;
double r382326 = z;
double r382327 = x;
double r382328 = r382326 + r382327;
double r382329 = r382326 - r382327;
double r382330 = r382329 / r382325;
double r382331 = r382328 * r382330;
double r382332 = r382325 - r382331;
double r382333 = 2.0;
double r382334 = r382332 / r382333;
return r382334;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 28.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
Initial program 28.7
Simplified13.0
rmApplied *-un-lft-identity13.0
Applied difference-of-squares13.0
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019326
(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)))