\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\sqrt[3]{\left(\mathsf{fma}\left(x, y, z\right) - \left(z + x \cdot y\right)\right) - 1} \cdot \left(\sqrt[3]{\left(\mathsf{fma}\left(x, y, z\right) - \left(z + x \cdot y\right)\right) - 1} \cdot \sqrt[3]{\left(\mathsf{fma}\left(x, y, z\right) - \left(z + x \cdot y\right)\right) - 1}\right)double f(double x, double y, double z) {
double r57558 = x;
double r57559 = y;
double r57560 = z;
double r57561 = fma(r57558, r57559, r57560);
double r57562 = 1.0;
double r57563 = r57558 * r57559;
double r57564 = r57563 + r57560;
double r57565 = r57562 + r57564;
double r57566 = r57561 - r57565;
return r57566;
}
double f(double x, double y, double z) {
double r57567 = x;
double r57568 = y;
double r57569 = z;
double r57570 = fma(r57567, r57568, r57569);
double r57571 = r57567 * r57568;
double r57572 = r57569 + r57571;
double r57573 = r57570 - r57572;
double r57574 = 1.0;
double r57575 = r57573 - r57574;
double r57576 = cbrt(r57575);
double r57577 = r57576 * r57576;
double r57578 = r57576 * r57577;
return r57578;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.0 |
|---|---|
| Target | 0 |
| Herbie | 7.8 |
Initial program 45.0
Simplified45.0
rmApplied add-cube-cbrt45.0
Simplified45.0
Simplified7.8
Final simplification7.8
herbie shell --seed 2019179
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))