\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 r531640 = x;
double r531641 = r531640 * r531640;
double r531642 = y;
double r531643 = r531642 * r531642;
double r531644 = r531641 + r531643;
double r531645 = z;
double r531646 = r531645 * r531645;
double r531647 = r531644 - r531646;
double r531648 = 2.0;
double r531649 = r531642 * r531648;
double r531650 = r531647 / r531649;
return r531650;
}
double f(double x, double y, double z) {
double r531651 = y;
double r531652 = z;
double r531653 = x;
double r531654 = r531652 + r531653;
double r531655 = r531653 - r531652;
double r531656 = r531655 / r531651;
double r531657 = r531654 * r531656;
double r531658 = r531651 + r531657;
double r531659 = 2.0;
double r531660 = r531658 / r531659;
return r531660;
}




Bits error versus x




Bits error versus y




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