\left(\left(x \cdot y + z \cdot z\right) + z \cdot z\right) + z \cdot z
\left(3 \cdot z\right) \cdot z + x \cdot y
double f(double x, double y, double z) {
double r440726 = x;
double r440727 = y;
double r440728 = r440726 * r440727;
double r440729 = z;
double r440730 = r440729 * r440729;
double r440731 = r440728 + r440730;
double r440732 = r440731 + r440730;
double r440733 = r440732 + r440730;
return r440733;
}
double f(double x, double y, double z) {
double r440734 = 3.0;
double r440735 = z;
double r440736 = r440734 * r440735;
double r440737 = r440736 * r440735;
double r440738 = x;
double r440739 = y;
double r440740 = r440738 * r440739;
double r440741 = r440737 + r440740;
return r440741;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 0.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 0.1
Simplified0.1
rmApplied fma-udef0.1
rmApplied associate-*r*0.1
Final simplification0.1
herbie shell --seed 2020002 +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)))