\left(\left(x - \left(y + 0.5\right) \cdot \log y\right) + y\right) - z
x - \mathsf{fma}\left(\log y, y + 0.5, z - y\right)double f(double x, double y, double z) {
double r376710 = x;
double r376711 = y;
double r376712 = 0.5;
double r376713 = r376711 + r376712;
double r376714 = log(r376711);
double r376715 = r376713 * r376714;
double r376716 = r376710 - r376715;
double r376717 = r376716 + r376711;
double r376718 = z;
double r376719 = r376717 - r376718;
return r376719;
}
double f(double x, double y, double z) {
double r376720 = x;
double r376721 = y;
double r376722 = log(r376721);
double r376723 = 0.5;
double r376724 = r376721 + r376723;
double r376725 = z;
double r376726 = r376725 - r376721;
double r376727 = fma(r376722, r376724, r376726);
double r376728 = r376720 - r376727;
return r376728;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 0.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 0.1
Simplified0.1
rmApplied fma-udef0.1
Applied associate--l+0.1
rmApplied *-un-lft-identity0.1
Applied *-un-lft-identity0.1
Applied distribute-lft-out--0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020060 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:stirlingError from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(- (- (+ y x) z) (* (+ y 0.5) (log y)))
(- (+ (- x (* (+ y 0.5) (log y))) y) z))