\left(\left(x \cdot y + z \cdot z\right) + z \cdot z\right) + z \cdot z
\mathsf{fma}\left(3, z \cdot z, x \cdot y\right)double f(double x, double y, double z) {
double r21916001 = x;
double r21916002 = y;
double r21916003 = r21916001 * r21916002;
double r21916004 = z;
double r21916005 = r21916004 * r21916004;
double r21916006 = r21916003 + r21916005;
double r21916007 = r21916006 + r21916005;
double r21916008 = r21916007 + r21916005;
return r21916008;
}
double f(double x, double y, double z) {
double r21916009 = 3.0;
double r21916010 = z;
double r21916011 = r21916010 * r21916010;
double r21916012 = x;
double r21916013 = y;
double r21916014 = r21916012 * r21916013;
double r21916015 = fma(r21916009, r21916011, r21916014);
return r21916015;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 0.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z)
:name "Linear.Quaternion:$c/ from linear-1.19.1.3, A"
:herbie-target
(+ (* (* 3 z) z) (* y x))
(+ (+ (+ (* x y) (* z z)) (* z z)) (* z z)))