\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\left(\left(\left(\left(\log \left(\frac{e^{\mathsf{fma}\left(x, y, z\right) - \left(z + x \cdot y\right)}}{e}\right)\right)\right)\right)\right)double f(double x, double y, double z) {
double r2146779 = x;
double r2146780 = y;
double r2146781 = z;
double r2146782 = fma(r2146779, r2146780, r2146781);
double r2146783 = 1.0;
double r2146784 = r2146779 * r2146780;
double r2146785 = r2146784 + r2146781;
double r2146786 = r2146783 + r2146785;
double r2146787 = r2146782 - r2146786;
return r2146787;
}
double f(double x, double y, double z) {
double r2146788 = x;
double r2146789 = y;
double r2146790 = z;
double r2146791 = fma(r2146788, r2146789, r2146790);
double r2146792 = r2146788 * r2146789;
double r2146793 = r2146790 + r2146792;
double r2146794 = r2146791 - r2146793;
double r2146795 = exp(r2146794);
double r2146796 = exp(1.0);
double r2146797 = r2146795 / r2146796;
double r2146798 = log(r2146797);
double r2146799 = /* ERROR: no posit support in C */;
double r2146800 = /* ERROR: no posit support in C */;
double r2146801 = /* ERROR: no posit support in C */;
double r2146802 = /* ERROR: no posit support in C */;
return r2146802;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.8 |
|---|---|
| Target | 0 |
| Herbie | 7.5 |
Initial program 44.8
rmApplied insert-posit1644.8
rmApplied add-cube-cbrt44.1
rmApplied insert-posit1644.1
Simplified33.7
rmApplied add-log-exp35.4
Applied add-log-exp35.4
Applied diff-log35.4
Simplified7.5
Final simplification7.5
herbie shell --seed 2019151
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))