\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\left(\left(\log \left(\frac{e^{\mathsf{fma}\left(x, y, z\right) - \left(z + x \cdot y\right)}}{e}\right)\right)\right)double f(double x, double y, double z) {
double r3641794 = x;
double r3641795 = y;
double r3641796 = z;
double r3641797 = fma(r3641794, r3641795, r3641796);
double r3641798 = 1.0;
double r3641799 = r3641794 * r3641795;
double r3641800 = r3641799 + r3641796;
double r3641801 = r3641798 + r3641800;
double r3641802 = r3641797 - r3641801;
return r3641802;
}
double f(double x, double y, double z) {
double r3641803 = x;
double r3641804 = y;
double r3641805 = z;
double r3641806 = fma(r3641803, r3641804, r3641805);
double r3641807 = r3641803 * r3641804;
double r3641808 = r3641805 + r3641807;
double r3641809 = r3641806 - r3641808;
double r3641810 = exp(r3641809);
double r3641811 = exp(1.0);
double r3641812 = r3641810 / r3641811;
double r3641813 = log(r3641812);
double r3641814 = /* ERROR: no posit support in C */;
double r3641815 = /* ERROR: no posit support in C */;
return r3641815;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.3 |
|---|---|
| Target | 0 |
| Herbie | 8.0 |
Initial program 45.3
rmApplied insert-posit1645.3
rmApplied add-cube-cbrt44.6
rmApplied insert-posit1644.6
Simplified34.1
rmApplied add-log-exp35.7
Applied add-log-exp47.7
Applied add-log-exp47.7
Applied diff-log47.7
Applied diff-log47.7
Simplified8.0
Final simplification8.0
herbie shell --seed 2019144
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))