\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\log \left(e^{\left(\mathsf{fma}\left(x, y, z\right) - \left(z + x \cdot y\right)\right) - 1}\right)double f(double x, double y, double z) {
double r4467982 = x;
double r4467983 = y;
double r4467984 = z;
double r4467985 = fma(r4467982, r4467983, r4467984);
double r4467986 = 1.0;
double r4467987 = r4467982 * r4467983;
double r4467988 = r4467987 + r4467984;
double r4467989 = r4467986 + r4467988;
double r4467990 = r4467985 - r4467989;
return r4467990;
}
double f(double x, double y, double z) {
double r4467991 = x;
double r4467992 = y;
double r4467993 = z;
double r4467994 = fma(r4467991, r4467992, r4467993);
double r4467995 = r4467991 * r4467992;
double r4467996 = r4467993 + r4467995;
double r4467997 = r4467994 - r4467996;
double r4467998 = 1.0;
double r4467999 = r4467997 - r4467998;
double r4468000 = exp(r4467999);
double r4468001 = log(r4468000);
return r4468001;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.1 |
|---|---|
| Target | 0 |
| Herbie | 7.7 |
Initial program 45.1
rmApplied associate--r+45.1
rmApplied add-log-exp46.6
Applied add-log-exp47.6
Applied sum-log47.6
Applied add-log-exp47.6
Applied add-log-exp47.6
Applied diff-log47.6
Applied diff-log47.6
Simplified7.7
Final simplification7.7
herbie shell --seed 2019192
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))