\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\frac{y + \left(z + x\right) \cdot \frac{x - z}{y}}{2}double f(double x, double y, double z) {
double r1310604 = x;
double r1310605 = r1310604 * r1310604;
double r1310606 = y;
double r1310607 = r1310606 * r1310606;
double r1310608 = r1310605 + r1310607;
double r1310609 = z;
double r1310610 = r1310609 * r1310609;
double r1310611 = r1310608 - r1310610;
double r1310612 = 2.0;
double r1310613 = r1310606 * r1310612;
double r1310614 = r1310611 / r1310613;
return r1310614;
}
double f(double x, double y, double z) {
double r1310615 = y;
double r1310616 = z;
double r1310617 = x;
double r1310618 = r1310616 + r1310617;
double r1310619 = r1310617 - r1310616;
double r1310620 = r1310619 / r1310615;
double r1310621 = r1310618 * r1310620;
double r1310622 = r1310615 + r1310621;
double r1310623 = 2.0;
double r1310624 = r1310622 / r1310623;
return r1310624;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 28.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 28.2
Simplified12.7
rmApplied *-un-lft-identity12.7
Applied difference-of-squares12.7
Applied times-frac0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020047
(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)))