\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 r841029 = x;
double r841030 = r841029 * r841029;
double r841031 = y;
double r841032 = r841031 * r841031;
double r841033 = r841030 + r841032;
double r841034 = z;
double r841035 = r841034 * r841034;
double r841036 = r841033 - r841035;
double r841037 = 2.0;
double r841038 = r841031 * r841037;
double r841039 = r841036 / r841038;
return r841039;
}
double f(double x, double y, double z) {
double r841040 = y;
double r841041 = z;
double r841042 = x;
double r841043 = r841041 + r841042;
double r841044 = r841042 - r841041;
double r841045 = r841044 / r841040;
double r841046 = r841043 * r841045;
double r841047 = r841040 + r841046;
double r841048 = 2.0;
double r841049 = r841047 / r841048;
return r841049;
}




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