\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 r2966250 = x;
double r2966251 = y;
double r2966252 = z;
double r2966253 = fma(r2966250, r2966251, r2966252);
double r2966254 = 1.0;
double r2966255 = r2966250 * r2966251;
double r2966256 = r2966255 + r2966252;
double r2966257 = r2966254 + r2966256;
double r2966258 = r2966253 - r2966257;
return r2966258;
}
double f(double x, double y, double z) {
double r2966259 = x;
double r2966260 = y;
double r2966261 = z;
double r2966262 = fma(r2966259, r2966260, r2966261);
double r2966263 = r2966259 * r2966260;
double r2966264 = r2966261 + r2966263;
double r2966265 = r2966262 - r2966264;
double r2966266 = exp(r2966265);
double r2966267 = exp(1.0);
double r2966268 = r2966266 / r2966267;
double r2966269 = log(r2966268);
double r2966270 = /* ERROR: no posit support in C */;
double r2966271 = /* ERROR: no posit support in C */;
double r2966272 = /* ERROR: no posit support in C */;
double r2966273 = /* ERROR: no posit support in C */;
return r2966273;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.7 |
|---|---|
| Target | 0 |
| Herbie | 8.1 |
Initial program 44.7
rmApplied insert-posit1644.7
rmApplied add-cube-cbrt44.0
rmApplied insert-posit1644.0
Simplified33.5
rmApplied add-log-exp35.1
Applied add-log-exp35.1
Applied sum-log35.1
Applied add-log-exp35.1
Applied diff-log35.1
Simplified8.1
Final simplification8.1
herbie shell --seed 2019149
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))