\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 r412062 = x;
double r412063 = r412062 * r412062;
double r412064 = y;
double r412065 = r412064 * r412064;
double r412066 = r412063 + r412065;
double r412067 = z;
double r412068 = r412067 * r412067;
double r412069 = r412066 - r412068;
double r412070 = 2.0;
double r412071 = r412064 * r412070;
double r412072 = r412069 / r412071;
return r412072;
}
double f(double x, double y, double z) {
double r412073 = y;
double r412074 = z;
double r412075 = x;
double r412076 = r412074 + r412075;
double r412077 = r412074 - r412075;
double r412078 = r412077 / r412073;
double r412079 = r412076 * r412078;
double r412080 = r412073 - r412079;
double r412081 = 2.0;
double r412082 = r412080 / r412081;
return r412082;
}




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)))