\left(\left(x \cdot y + z \cdot z\right) + z \cdot z\right) + z \cdot z
\mathsf{fma}\left(3, {z}^{2}, y \cdot x\right)double f(double x, double y, double z) {
double r361912 = x;
double r361913 = y;
double r361914 = r361912 * r361913;
double r361915 = z;
double r361916 = r361915 * r361915;
double r361917 = r361914 + r361916;
double r361918 = r361917 + r361916;
double r361919 = r361918 + r361916;
return r361919;
}
double f(double x, double y, double z) {
double r361920 = 3.0;
double r361921 = z;
double r361922 = 2.0;
double r361923 = pow(r361921, r361922);
double r361924 = y;
double r361925 = x;
double r361926 = r361924 * r361925;
double r361927 = fma(r361920, r361923, r361926);
return r361927;
}




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
Taylor expanded around 0 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019304 +o rules:numerics
(FPCore (x y z)
:name "Linear.Quaternion:$c/ from linear-1.19.1.3, A"
:precision binary64
:herbie-target
(+ (* (* 3 z) z) (* y x))
(+ (+ (+ (* x y) (* z z)) (* z z)) (* z z)))