\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\log \left(\frac{e^{\left(\left(\mathsf{fma}\left(x, y, z\right) - \left(z + x \cdot y\right)\right)\right)}}{e}\right)double f(double x, double y, double z) {
double r1379168 = x;
double r1379169 = y;
double r1379170 = z;
double r1379171 = fma(r1379168, r1379169, r1379170);
double r1379172 = 1.0;
double r1379173 = r1379168 * r1379169;
double r1379174 = r1379173 + r1379170;
double r1379175 = r1379172 + r1379174;
double r1379176 = r1379171 - r1379175;
return r1379176;
}
double f(double x, double y, double z) {
double r1379177 = x;
double r1379178 = y;
double r1379179 = z;
double r1379180 = fma(r1379177, r1379178, r1379179);
double r1379181 = r1379177 * r1379178;
double r1379182 = r1379179 + r1379181;
double r1379183 = r1379180 - r1379182;
double r1379184 = /* ERROR: no posit support in C */;
double r1379185 = /* ERROR: no posit support in C */;
double r1379186 = exp(r1379185);
double r1379187 = exp(1.0);
double r1379188 = r1379186 / r1379187;
double r1379189 = log(r1379188);
return r1379189;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.8 |
|---|---|
| Target | 0 |
| Herbie | 7.6 |
Initial program 44.8
rmApplied add-log-exp46.8
Applied add-log-exp46.8
Applied sum-log46.9
Applied add-log-exp47.3
Applied diff-log47.3
Simplified30.7
rmApplied add-log-exp31.7
Applied add-log-exp31.9
Applied diff-log31.9
Simplified14.8
Taylor expanded around -inf 7.5
rmApplied insert-posit167.6
Final simplification7.6
herbie shell --seed 2019151
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))