\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\frac{\mathsf{fma}\left(\frac{x + z}{y}, x - z, y\right)}{2}double f(double x, double y, double z) {
double r746903 = x;
double r746904 = r746903 * r746903;
double r746905 = y;
double r746906 = r746905 * r746905;
double r746907 = r746904 + r746906;
double r746908 = z;
double r746909 = r746908 * r746908;
double r746910 = r746907 - r746909;
double r746911 = 2.0;
double r746912 = r746905 * r746911;
double r746913 = r746910 / r746912;
return r746913;
}
double f(double x, double y, double z) {
double r746914 = x;
double r746915 = z;
double r746916 = r746914 + r746915;
double r746917 = y;
double r746918 = r746916 / r746917;
double r746919 = r746914 - r746915;
double r746920 = fma(r746918, r746919, r746917);
double r746921 = 2.0;
double r746922 = r746920 / r746921;
return r746922;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 28.9
Simplified0.2
Final simplification0.2
herbie shell --seed 2020042 +o rules:numerics
(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)))