\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{\sqrt[3]{\sqrt[3]{t}} \cdot \left(\left(\left(2 \cdot y + 1\right) \cdot \left(\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot z\right)\right) \cdot \sqrt[3]{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right)}{16}\right)double f(double x, double y, double z, double t, double a, double b) {
double r39964842 = x;
double r39964843 = y;
double r39964844 = 2.0;
double r39964845 = r39964843 * r39964844;
double r39964846 = 1.0;
double r39964847 = r39964845 + r39964846;
double r39964848 = z;
double r39964849 = r39964847 * r39964848;
double r39964850 = t;
double r39964851 = r39964849 * r39964850;
double r39964852 = 16.0;
double r39964853 = r39964851 / r39964852;
double r39964854 = cos(r39964853);
double r39964855 = r39964842 * r39964854;
double r39964856 = a;
double r39964857 = r39964856 * r39964844;
double r39964858 = r39964857 + r39964846;
double r39964859 = b;
double r39964860 = r39964858 * r39964859;
double r39964861 = r39964860 * r39964850;
double r39964862 = r39964861 / r39964852;
double r39964863 = cos(r39964862);
double r39964864 = r39964855 * r39964863;
return r39964864;
}
double f(double x, double y, double z, double t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
double r39964865 = x;
double r39964866 = t;
double r39964867 = cbrt(r39964866);
double r39964868 = cbrt(r39964867);
double r39964869 = 2.0;
double r39964870 = y;
double r39964871 = r39964869 * r39964870;
double r39964872 = 1.0;
double r39964873 = r39964871 + r39964872;
double r39964874 = r39964867 * r39964867;
double r39964875 = z;
double r39964876 = r39964874 * r39964875;
double r39964877 = r39964873 * r39964876;
double r39964878 = cbrt(r39964874);
double r39964879 = r39964877 * r39964878;
double r39964880 = r39964868 * r39964879;
double r39964881 = 16.0;
double r39964882 = r39964880 / r39964881;
double r39964883 = cos(r39964882);
double r39964884 = r39964865 * r39964883;
return r39964884;
}




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.2 |
|---|---|
| Target | 44.3 |
| Herbie | 45.2 |
Initial program 46.2
Taylor expanded around 0 45.5
rmApplied add-cube-cbrt45.4
Applied associate-*r*45.4
rmApplied associate-*l*45.2
rmApplied add-cube-cbrt45.2
Applied cbrt-prod45.2
Applied associate-*r*45.2
Final simplification45.2
herbie shell --seed 2019172
(FPCore (x y z t a b)
:name "Codec.Picture.Jpg.FastDct:referenceDct from JuicyPixels-3.2.6.1"
:herbie-target
(* x (cos (* (/ b 16.0) (/ t (+ (- 1.0 (* a 2.0)) (pow (* a 2.0) 2.0))))))
(* (* x (cos (/ (* (* (+ (* y 2.0) 1.0) z) t) 16.0))) (cos (/ (* (* (+ (* a 2.0) 1.0) b) t) 16.0))))