\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\sqrt[3]{\left(\left(-1 - y \cdot x\right) + \mathsf{fma}\left(x, y, z\right)\right) - z} \cdot \left(\sqrt[3]{\left(\left(-1 - y \cdot x\right) + \mathsf{fma}\left(x, y, z\right)\right) - z} \cdot \sqrt[3]{\left(\left(-1 - y \cdot x\right) + \mathsf{fma}\left(x, y, z\right)\right) - z}\right)double f(double x, double y, double z) {
double r3076897 = x;
double r3076898 = y;
double r3076899 = z;
double r3076900 = fma(r3076897, r3076898, r3076899);
double r3076901 = 1.0;
double r3076902 = r3076897 * r3076898;
double r3076903 = r3076902 + r3076899;
double r3076904 = r3076901 + r3076903;
double r3076905 = r3076900 - r3076904;
return r3076905;
}
double f(double x, double y, double z) {
double r3076906 = -1.0;
double r3076907 = y;
double r3076908 = x;
double r3076909 = r3076907 * r3076908;
double r3076910 = r3076906 - r3076909;
double r3076911 = z;
double r3076912 = fma(r3076908, r3076907, r3076911);
double r3076913 = r3076910 + r3076912;
double r3076914 = r3076913 - r3076911;
double r3076915 = cbrt(r3076914);
double r3076916 = r3076915 * r3076915;
double r3076917 = r3076915 * r3076916;
return r3076917;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.2 |
|---|---|
| Target | 0 |
| Herbie | 45.1 |
Initial program 45.2
rmApplied flip-+45.6
Simplified45.5
rmApplied clear-num45.6
Simplified45.3
rmApplied *-un-lft-identity45.3
Applied *-un-lft-identity45.3
Applied distribute-lft-out45.3
Applied *-un-lft-identity45.3
Applied distribute-lft-out--45.3
Simplified45.1
rmApplied add-cube-cbrt45.1
Final simplification45.1
herbie shell --seed 2019143
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))