\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\sqrt[3]{\left(\left(\mathsf{fma}\left(x, y, z\right) - 1\right) - x \cdot y\right) - z} \cdot \left(\sqrt[3]{\left(\left(\mathsf{fma}\left(x, y, z\right) - 1\right) - x \cdot y\right) - z} \cdot \sqrt[3]{\left(\left(\mathsf{fma}\left(x, y, z\right) - 1\right) - x \cdot y\right) - z}\right)double f(double x, double y, double z) {
double r70704 = x;
double r70705 = y;
double r70706 = z;
double r70707 = fma(r70704, r70705, r70706);
double r70708 = 1.0;
double r70709 = r70704 * r70705;
double r70710 = r70709 + r70706;
double r70711 = r70708 + r70710;
double r70712 = r70707 - r70711;
return r70712;
}
double f(double x, double y, double z) {
double r70713 = x;
double r70714 = y;
double r70715 = z;
double r70716 = fma(r70713, r70714, r70715);
double r70717 = 1.0;
double r70718 = r70716 - r70717;
double r70719 = r70713 * r70714;
double r70720 = r70718 - r70719;
double r70721 = r70720 - r70715;
double r70722 = cbrt(r70721);
double r70723 = r70722 * r70722;
double r70724 = r70722 * r70723;
return r70724;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.6 |
|---|---|
| Target | 0 |
| Herbie | 45.5 |
Initial program 45.6
Simplified45.6
rmApplied associate--r+45.5
rmApplied add-cube-cbrt45.5
Final simplification45.5
herbie shell --seed 2019194
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))