\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 r4416210 = x;
double r4416211 = y;
double r4416212 = z;
double r4416213 = fma(r4416210, r4416211, r4416212);
double r4416214 = 1.0;
double r4416215 = r4416210 * r4416211;
double r4416216 = r4416215 + r4416212;
double r4416217 = r4416214 + r4416216;
double r4416218 = r4416213 - r4416217;
return r4416218;
}
double f(double x, double y, double z) {
double r4416219 = x;
double r4416220 = y;
double r4416221 = z;
double r4416222 = fma(r4416219, r4416220, r4416221);
double r4416223 = r4416219 * r4416220;
double r4416224 = r4416221 + r4416223;
double r4416225 = r4416222 - r4416224;
double r4416226 = 1.0;
double r4416227 = r4416225 - r4416226;
double r4416228 = exp(r4416227);
double r4416229 = log(r4416228);
return r4416229;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.0 |
|---|---|
| Target | 0 |
| Herbie | 8.4 |
Initial program 45.0
rmApplied add-log-exp46.6
Applied add-log-exp47.6
Applied sum-log47.6
Applied add-log-exp47.6
Applied sum-log47.6
Applied add-log-exp47.6
Applied diff-log47.6
Simplified34.7
rmApplied rem-log-exp34.5
rmApplied add-log-exp36.2
Applied add-log-exp36.2
Applied add-log-exp47.6
Applied add-log-exp47.6
Applied diff-log47.6
Applied diff-log47.6
Applied diff-log47.6
Simplified8.4
Final simplification8.4
herbie shell --seed 2019172
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))