\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\frac{\mathsf{fma}\left(\frac{1}{\frac{y}{x + z}}, x - z, y\right)}{2}double f(double x, double y, double z) {
double r730713 = x;
double r730714 = r730713 * r730713;
double r730715 = y;
double r730716 = r730715 * r730715;
double r730717 = r730714 + r730716;
double r730718 = z;
double r730719 = r730718 * r730718;
double r730720 = r730717 - r730719;
double r730721 = 2.0;
double r730722 = r730715 * r730721;
double r730723 = r730720 / r730722;
return r730723;
}
double f(double x, double y, double z) {
double r730724 = 1.0;
double r730725 = y;
double r730726 = x;
double r730727 = z;
double r730728 = r730726 + r730727;
double r730729 = r730725 / r730728;
double r730730 = r730724 / r730729;
double r730731 = r730726 - r730727;
double r730732 = fma(r730730, r730731, r730725);
double r730733 = 2.0;
double r730734 = r730732 / r730733;
return r730734;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 27.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 27.7
Simplified0.2
rmApplied clear-num0.2
Final simplification0.2
herbie shell --seed 2019350 +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)))