\left(x \cdot \cos \left(\frac{\left(\left(y \cdot 2 + 1\right) \cdot z\right) \cdot t}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)x \cdot \cos \left(\frac{0}{16}\right)double f(double x, double y, double z, double t, double a, double b) {
double r981847 = x;
double r981848 = y;
double r981849 = 2.0;
double r981850 = r981848 * r981849;
double r981851 = 1.0;
double r981852 = r981850 + r981851;
double r981853 = z;
double r981854 = r981852 * r981853;
double r981855 = t;
double r981856 = r981854 * r981855;
double r981857 = 16.0;
double r981858 = r981856 / r981857;
double r981859 = cos(r981858);
double r981860 = r981847 * r981859;
double r981861 = a;
double r981862 = r981861 * r981849;
double r981863 = r981862 + r981851;
double r981864 = b;
double r981865 = r981863 * r981864;
double r981866 = r981865 * r981855;
double r981867 = r981866 / r981857;
double r981868 = cos(r981867);
double r981869 = r981860 * r981868;
return r981869;
}
double f(double x, double __attribute__((unused)) y, double __attribute__((unused)) z, double __attribute__((unused)) t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
double r981870 = x;
double r981871 = 0.0;
double r981872 = 16.0;
double r981873 = r981871 / r981872;
double r981874 = cos(r981873);
double r981875 = r981870 * r981874;
return r981875;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 46.1 |
|---|---|
| Target | 44.3 |
| Herbie | 44.1 |
Initial program 46.1
Taylor expanded around 0 45.5
Taylor expanded around 0 44.1
Final simplification44.1
herbie shell --seed 2020060 +o rules:numerics
(FPCore (x y z t a b)
:name "Codec.Picture.Jpg.FastDct:referenceDct from JuicyPixels-3.2.6.1"
:precision binary64
:herbie-target
(* x (cos (* (/ b 16) (/ t (+ (- 1 (* a 2)) (pow (* a 2) 2))))))
(* (* x (cos (/ (* (* (+ (* y 2) 1) z) t) 16))) (cos (/ (* (* (+ (* a 2) 1) b) t) 16))))