\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\frac{\mathsf{fma}\left(\left(x + z\right) \cdot \frac{1}{y}, x - z, y\right)}{2}double f(double x, double y, double z) {
double r420001 = x;
double r420002 = r420001 * r420001;
double r420003 = y;
double r420004 = r420003 * r420003;
double r420005 = r420002 + r420004;
double r420006 = z;
double r420007 = r420006 * r420006;
double r420008 = r420005 - r420007;
double r420009 = 2.0;
double r420010 = r420003 * r420009;
double r420011 = r420008 / r420010;
return r420011;
}
double f(double x, double y, double z) {
double r420012 = x;
double r420013 = z;
double r420014 = r420012 + r420013;
double r420015 = 1.0;
double r420016 = y;
double r420017 = r420015 / r420016;
double r420018 = r420014 * r420017;
double r420019 = r420012 - r420013;
double r420020 = fma(r420018, r420019, r420016);
double r420021 = 2.0;
double r420022 = r420020 / r420021;
return r420022;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 28.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 28.5
Simplified0.2
rmApplied div-inv0.2
Final simplification0.2
herbie shell --seed 2019322 +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)))